Bessere Lösung?



  • Hallo,

    ich habe eine Klasse, nennen wir sie A. Diese bekommt im Konstruktor eine Referenz auf ein Objekt von Typ T (und benutzt das korrespondierende Objekt auch). Nun würde ich davon gerne eine Klasse ableiten, nennen wir sie B. Diese soll ein Objekt von Typ T als Member enthalten und dieses soll dem A-Teil im Konstruktor übergeben werden (ich möchte die Existenz des T Objekts vor dem Benutzer verstecken).
    Ist an folgender Lösung etwas auszusetzen? Gibt es einfachere / bessere / schönere Lösungen?

    #include <iostream>
    
    class A {
    public:
    	A(int& foo) {
    		std::cout << foo << std::endl;
    	}
    };
    
    namespace {
    	class Dummy {
    	public:
    		Dummy() : foo(42) {
    		}
    		int foo;
    	};
    }
    
    class B : private Dummy, public A {
    public:
    	B() : A(foo) {
    	}
    };
    
    int main(int , const char**) {
    	B works;
    }
    


  • Warum ableiten im Vergleich zum Delegieren? Und wenn foo sowieso 42 ist, dann kann der Konstruktor von A in B gleich den Parameter uebergeben ohne den Umweg ueber foo.



  • sirniko schrieb:

    ich habe eine Klasse, nennen wir sie A. [...]
    Ist an folgender Lösung etwas auszusetzen? Gibt es einfachere / bessere / schönere Lösungen?

    Du hast ein Beispiel, nennen wir es B. Ferner hast du einen Lösungsansatz LP für dein tatsächliches Problem P und Lösungsansatz LB für dein Beispiel. Du möchtest jetzt, dass wir von der Beziehung LB->B Aussagen über deren Schönheit, Einfachheit und Qualität machen. Kannst du gerne haben, bringt dir aber nichts, denn was du wissen willst, ist etwas über die Beziehung LP->P. Die Vereinfachungen P->B und LP->LB lassen aber keine verlässliche Aussage darüber aus.


Anmelden zum Antworten