Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno
Con la quattordicesima generazione Lenovo ridisegna il suo ThinkPad più iconico attorno al nuovo Space Frame e ai processori Intel Core Ultra Series 3. Resta sotto 1Kg, è molto più semplice da riparare e si rivolge al professionista che lavora in mobilità, con un prezzo da prodotto di vertice.
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro
Le Jabra Evolve3 85 non sono semplicemente cuffie Bluetooth con cancellazione del rumore. Sono un dispositivo professionale pensato per chi trascorre gran parte della giornata in riunione, al telefono o davanti a un assistente basato sull'intelligenza artificiale
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-05-2012, 09:31   #1
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
[C++] Design di un file Header

Salve ragazzi, apro questo thread a mo di "sondaggio" e scambio opinioni.
Sono parecchi mesi che programmo in c++ e spesso e volentieri uno strumento valido per l'apprendimento è stato per me il leggere listati altrui, capirne i concetti, le tecniche, il design, e quant'altro. Una cosa che spesso ho notato è la varietà di stili nello stendere i file header, cosa che può aiutare o rendere difficoltosa la lettura, e nel caso di codice reso disponibile ad altri è un fattore direi più che importante.
Ma arriviamo alla domanda: voi tendete a raggruppare tutto sotto sezioni fisse (public, private e se presente protected) o dividete il codice per aree tematiche piuttosto che per visibilità? Un esempio di quest'ultimo concetto potrebbe essere questo listato:

Codice:
#ifndef KCHRONO_H
#define KCHRONO_H

#include <ctime>
#include <string>


namespace KsLib
{

  class KChrono
  {
      // Enumerators & Statics
      public:
          enum ChronoStatus {Pause, Forward, Backward};          
          enum ChronoType {Clock, Countdown};
          enum ChronoFormat {HMS, HMSC};
          constexpr static double CLOCKS_PER_MS = CLOCKS_PER_SEC / 1000.0;

      // Fields & Fields Interfaces
      private:
          ChronoStatus _status;
          clock_t  _tickCount;
          clock_t  _initialValue;
          clock_t  _endValue;
          bool _endFlag;
      public:
          void setEndValue(const long seconds);
          clock_t getEndValue() const;
          clock_t getTickCount() const;

      // Constructors
      public:
          KChrono();
          KChrono(const long seconds);

      // Class Methods
      public:
          void forward();
          void backward();
          void pause();
          void reset(const long seconds = 0);
          bool EndReached() const;
          std::string ToString(ChronoType chronoType, ChronoFormat chronoFormat) const;

    }; // class KChrono

} // namespace KsLib


#endif // KCHRONO_H
Lo so, non è un concetto fondamentale il design degli header (visto che al compilatore non cambia una ceppa), però son curioso di conoscere i vostri personali stili.

Ultima modifica di [Kendall] : 04-05-2012 alle 09:47.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2012, 11:26   #2
AllerITA
Member
 
L'Avatar di AllerITA
 
Iscritto dal: Oct 2010
Città: Savona
Messaggi: 194
Io tendo a raggruppare per regole di visibilità all'interno della
classe le variabili ed i metodi.
Mettendo prima i privated i protected e in fine i public.

Ulteriormente all'interno delle dichiarazioni
di visibilità tendo ad inserire raggruppandole per prima le variabili della classe
separandole tramite spazi dai metodi.
Questo non lo faccio per i costruttori e il distruttore che metto come prima voce nella rispettiva dichiarazione di visibilità.

Meglio se le dichiarazioni sono tutte i rispettivamente in ordine alfabetico.

Così prima cosa che si può notare e' la regola di visibilità poi la tipologia e in seguito le iniziali dell elemento della classe cercato.

A mio parere e' un metodo valido. Comunque sono aperto a idee più intelligenti per modificare il mio approccio.
__________________
AMD Phenom II X6 3Ghz, MB Gigabyte 790xta-ud4 F4A, 4Gb Ram ddr3, HD Segate Barracuda 1T, SV ASUS GTX 560 Ti DirectCu II ,Monitor Philips 1920x1080 led 2 ms, Xbox360 Slim, Tablet Asus Transformer Pad TF300T, Gameboy Advance, Ipod Touch 16Gb
AllerITA è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2012, 11:48   #3
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Io ho un "format" più o meno uguale, forse più strutturato nella dichiarazione della classe: prima elenco tutti i membri "public", poi i "protected" e poi i "private".
All'interno di ogni visibilità le dichiarazioni sono in questo ordine:

-classi nested
-typedef
-variabili
-costruttori
-distruttori
-metodi vari
-setters
-getters
-"boolean getters" (es: isWindowActive() )
-event callbacks virtuali e non (onWindowClosed, onButtonPressed)
-metodi di framework (metodi da usarsi solo all'interno della libreria anche se sono pubblici o protected e quindi ereditati, es: _fireOnButtonPressed() )

Sì sono parecchio fiscale
Ma così è facilissimo trovare tutto, e soprattutto è facile capire a che serve.

Un'altra cosa che faccio è NON includere alcun file "esterno" direttamente, es <ctime>: invece creo un "project common header" che include tutti i file esterni, e poi includo quello in tutti i file: è comodissimo perchè assicura la coerenza delle varie inclusioni/defines in tutto il progetto, e ti evita di dover pensare ogni volta a quali file servono.
E se si usano i precompiled headers, velocizza di parecchio la build

Too bad che su Linux ancora non sono riuscito a trvare un modo decente per usarli, e ogni progetto mi ci mette anni a compilare.
Ehhh, la superiorità tecnologica dell'open source
__________________
*ToMmO*

devlog | twitter
Tommo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Rubati 6 pallet di hardware NVIDIA da 11...
Addio ai limiti del silicio? Ecco il dia...
Windows 11 27H2 sarà un 'cambio completo...
Hai mai notato che l'iPhone sbaglia semp...
Raffreddamento a liquido e schermo perso...
TSMC valuta la produzione di 3D DRAM su ...
Il Cybertruck ha i giorni contati? Musk ...
Meta porta la voce su Muse, e a sponsori...
Perché il disco principale di Win...
Quanta acqua consuma l'IA? Da cinque goc...
Airbnb lancerà un assistente AI per pian...
25 miliardi sul tavolo: i sauditi voglio...
TV Haier QLED da 65'' a meno di 400€ su ...
Il meglio degli sconti Amazon del weeken...
Il rumore degli aerei in sottofondo può ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v