Ich arbeite in einer Produktionsstätte, die ein großes C++ - Projekt verwendet, um den Herstellungsprozess zu automatisieren.C++ Relais-Member-Funktionen in verschachtelten Klassen?
Ich sehe überall eine gewisse Übung, die den Code nur unnötig lang zu machen scheint und ich frage mich, ob es einen bestimmten Grund gibt, warum diese Praxis angewendet wird.
Siehe unten für ein vereinfachtes Beispiel, das diese Vorgehensweise demonstriert.
Erste Datei:
class A {
private:
int a;
public:
int get_a()
{ return a; }
void set_a(int arg)
{ a = arg; }
};
Zweite Datei:
class B {
private:
int b;
public:
int get_b()
{ return b; }
void set_b(int arg)
{ b = arg; }
};
Dritte Datei:
class C {
private:
A obj1;
B obj2;
public:
int get_a()
{ return obj1.get_a(); }
int get_b()
{ return obj2.get_b(); }
void set_a(int arg)
{ obj1.set_a(arg); }
void set_b(int arg)
{ obj2.set_b(arg); }
};
Es scheint mir wie eine leichte Veränderung der Designphilosophie könnte drastisch die haben reduziert Menge an Code in der dritten Datei. Etwas wie folgt aus:
class C {
public:
A obj1;
B obj2;
};
Mit obj1
und obj2
public
Mitglieder in der C
Klasse zu sein scheint nicht unsicher zu sein, weil die A
und B
Klassen jeweils sicher die immer und Einstellung ihrer eigenen Membervariablen behandeln.
Der einzige Nachteil, den ich es zu tun auf diese Weise denken kann, ist, dass alle Instanzen der C
Klasse, die eine Funktion aufruft, müßten so etwas wie obj.obj1.get_a()
anstatt nur tun obj.get_a()
aber dies scheint wie viel weniger einen Nachteil, als wenn private A
und B
Objektinstanzen in der C
Klasse und müssen dann manuell alle ihre Mitgliedsfunktionen "weiterleiten".
Ich realisiere für dieses einfache Beispiel, es ist nicht viel extra Code, aber für dieses große Projekt, das meine Firma verwendet, fügt es buchstäblich Zehntausende von Zeilen des Codes.
Fehle ich etwas?
Die Getter und Setter sind ein bisschen ein Geruch, aber es sieht so aus, als ob der ursprüngliche Entwickler das [Gesetz von Demeter] (https://en.wikipedia.org/wiki/Law_of_Demeter) anwandte. Es gibt Vor- und Nachteile. –
Die Nachteile scheinen offensichtlich - Hinzufügen einer Tonne mehr Code. Was sind die Nachteile? (Abgesehen davon, was ich bereits erwähnt habe, d. H. 'Obj.obj1.get_a()' vs. 'obj.get_a()') – ImaginaryHuman072889
Nevermind ... erklärt die Wikipedia-Seite ziemlich gut. Vielen Dank! – ImaginaryHuman072889