Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
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


NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
OpenAI punta sulla pubblicità in ...
Gmail, arriva la crittografia end-to-end...
Molotov contro la casa di Altman: il CEO...
Tesla ottiene l'approvazione del sistema...
Monopattini elettrici: il MIT rassicura ...
Roborock Saros 20 va subito in offerta: ...
Epic Games lavora ad un gioco sparatutto...
Rockstar Games vittima di un attacco hac...
Intel Core Ultra 400 'Nova Lake-S': fino...
Finalmente un bel portatile tuttofare a ...
Accessori auto su Amazon: i migliori asp...
Microsoft promette meno caos fra i canal...
Apple accelera sugli occhiali smart: qua...
Linux, nuove patch migliorano la gestion...
Snap si affida a Qualcomm per gli occhia...
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: 10:41.


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