C ++ - prefisso esplicitamente ogni membro con pubblico / privato

3

Normalmente, una classe C ++ viene scritta con public: e private: che si applicano a una serie di membri:

class Foo {
private:
    int x;
    int y;
    int z;
public:
    int getX();
    int setY(int val);
    void print();
}

Uno stile di codifica alternativo è quello di prefisso esplicitamente ogni membro con public / private . Questa è una buona o cattiva idea in C ++? Ecco l'esempio precedente modificato in questo modo:

class Foo {
    private: int x;
    private: int y;
    private: int z;
    public: int getX();
    public: int setY(int val);
    public: void print();
}

Non sono riuscito a trovare opinioni o consigli su questo argomento effettuando ricerche sul Web, Software Engineering SE o Stack Overflow. Ecco il mio brainstorming:

Vantaggi del primo modo tradizionale:

  • È lo stile idiomatico durante la lettura e la scrittura del codice C ++.
  • Riduce la ridondanza quando un grande gruppo di membri è pubblico o privato.

Vantaggi del secondo, modo esplicito:

  • La designazione public / private è immediatamente visibile nel punto in cui ogni membro è dichiarato. Non è necessario eseguire la scansione verso l'alto di una quantità potenzialmente grande di codice per trovare il modificatore di visibilità più recente.
  • Quando si riordina l'ordine dei membri, questa tecnica riduce il rumore nelle diff e elimina la possibilità di spostare accidentalmente una variabile pubblica in una sezione privata o viceversa. (Tuttavia, è discutibile che questi problemi siano comuni o non comuni nello stile tradizionale).
  • È lo stile obbligatorio in linguaggi strettamente correlati come Java e C #.
posta Nayuki 09.04.2017 - 06:50
fonte

3 risposte

14

Questo è ciò che succederà inevitabilmente prima o poi:

class Foo {
private: int x;
private: int y;
private: int z;
   int w;
   int q;
public: int getX();
public: int setY(int val);
public: void print();
   int getW();
   int setQ();
private:
   int f;
}

E poi tutti quei pubblici e privati esterni sono solo rumori. Il compilatore non lo applica, quindi potresti anche usare ciò che è idiomatico ed è molto più facile essere disinvolti nell'ordinare semplicemente i membri della tua classe.

Richiedere i modificatori dei permessi su ogni membro come avviene in Java e C # e quant'altro non è altrettanto odioso perché non è necessario conservare i file di origine e i file di intestazione come si fa in C ++. La classe, i membri e i loro permessi vengono scritti solo una volta e tutti nello stesso punto, quindi non è un grosso problema.

    
risposta data 09.04.2017 - 08:55
fonte
10

È una cattiva idea.

Come dici tu stesso:

[The traditional way] is the idiomatic style when reading and writing C++ code.

Usa sempre lo stile di sorpresa minima. quando qualcun altro legge il tuo codice, si chiederà "perché hai fatto questo?" quando fai le cose in modo diverso dal previsto Questa reazione rallenta la lettura del codice.

    
risposta data 09.04.2017 - 07:19
fonte
3

La tua analisi ignora un vantaggio del formato tradizionale: incoraggia uno stile se i membri sono raggruppati in base alla visibilità, promuovendo un tipo di ordine che rende la navigazione del codice sostanzialmente più semplice. L'utilizzo di questo stile evita completamente qualsiasi problema che citi come vantaggi del tuo formato suggerito, e nella mia esperienza è diventato quasi universale nel codice C ++ reale.

    
risposta data 09.04.2017 - 22:00
fonte

Leggi altre domande sui tag