Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-05-2012, 08: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 08:47.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2012, 10: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, 10: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


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
La Camera USA presenta il conto: i data ...
Non solo EV, ma anche IA: Panasonic inau...
iPhone Duo, il debutto del pieghevole di...
Atlas 960E SuperPoD, la risposta di Huaw...
IA militare e nucleare: esperti USA e ci...
Dieci mini-reattori nucleari in Europa d...
CONTROL Resonant su PC: Path Tracing, Ra...
ColorOS 17 arriva su circa 90 dispositiv...
GTA VI, il multiplayer potrebbe debuttar...
Aggiornamento KB5002914 rompe Excel: ecc...
Processo Huawei a Brooklyn: l'FBI mostra...
WhatsApp introduce nuovi temi per le cha...
NVIDIA, Google e Emerald AI uniscono le ...
iPhone 18 Pro Max, il test sulla vapor c...
Fine estate in giardino: le proposte sco...
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: 04:10.


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