Assegnare un nome quando devi ereditare le classi [chiuso]

0

Sono sempre un grande fan degli standard e penso di aver finalmente deciso uno dei tanti standard di denominazione C ++. Tuttavia, sembra quasi discutibile perché lavorando con un paio di librerie in cui l'uso standard è quello di ereditare le classi, la denominazione è ora disattivata quando si esegue l'override.

Ora, non sono obbligato ad ereditare effettivamente queste classi, ma mi ha fatto meravigliare e non ho ancora trovato questa domanda specifica.

Quando si eredita la classe di una terza parte, come vengono gestite le convenzioni di denominazione? Lo fai semplicemente e le funzioni che uno o due hai bisogno di sovrascrivere sono diverse o adotti la convenzione di denominazione della biblioteca per l'intera classe? C'è qualche altro trucco?

    
posta TyCobb 21.04.2016 - 04:03
fonte

2 risposte

4

Questa è la sfida con le lingue in cui la comunità linguistica non ha stabilito una convenzione di denominazione.

Uno si aggira se (come dici tu nel tuo caso) ci sono solo alcune funzioni ereditate che possono essere offese, potresti rendere la sottoclasse una facciata

class YourClass: private LibraryClass
{
   public:
      int yourNamingConvention()
      { 
         return this->library_naming_convention(); 
      }
};

Disclaimer:

Sicuramente non sto dicendo che questa dovrebbe essere una politica generale. Ma se (1) ci sono solo alcuni metodi di libreria che sono in una convenzione di denominazione diversa dalla tua, e (2) quelle funzioni non sono così comuni che una ricerca su google della funzione esatta farebbe apparire una buona documentazione (quindi cambiando la il nome rende la documentazione più difficile da trovare) e (3) .... ecc., quindi potrebbe valerne la pena per il nome della congruenza della convenzione.

Fondamentalmente sto dicendo "ecco una cosa che potresti fare nel giusto contesto, fino a te per fare quella chiamata" non "Penso che questa sia la soluzione tagliata e secca"

Modifica:

modificato in ereditarietà privata come discusso nei commenti - Non sono un ragazzo c ++ quindi ho dovuto cercare la differenza

    
risposta data 21.04.2016 - 07:19
fonte
0

When having to inherit a third-party's class, how are naming conventions handled?

TL; DR:

È quasi sempre preferibile preferire la composizione all'eredità. Non ereditare da software di terze parti e include le classi definite nello spazio dei nomi std e il problema verrà risolto.

Invertire la linea di attrazione di Nike: non farlo.

Dettagli:

No, non farlo. L'assioma moderno è che la composizione è (quasi sempre) preferibile all'eredità. Questo vale, in vanga, per software di terze parti.

Se usi la composizione piuttosto che l'ereditarietà e se obbedisci alla loro opinione diffusa che, ad eccezione dei tipi POD, i membri dei dati non dovrebbero essere public (e preferibilmente dovrebbe essere private ), allora non lo fa importa se usano raNDoMStuDLyCaPs e usi qualcos'altro (o viceversa).

Se si segue la regola generale di preferire la composizione sull'ereditarietà, non si dovrebbe ereditare da alcun software di terze parti (e ciò include roba nello spazio dei nomi std ) a meno che non ci sia un motivo convincente per violare quella regola generale.

Invertire la linea di attrazione di Nike: non farlo, dove "it" significa ereditare da software di terze parti.

    
risposta data 21.04.2016 - 10:24
fonte

Leggi altre domande sui tag