2017-06-22 8 views
1

Wie initialisiert man das Objekt dynamisch im Programm ohne Vererbung in C++? Zum Beispiel Ich habe Klasse A und Klasse B. Und abhängig von der Bedingung muss ich Instanz des Objekts erstellen, aber ich weiß nicht genau, welches Objekt ich erstellen muss, es hängt von Informationen, die Benutzer eingeben;Wie initialisiert man ein Objekt dynamisch im Programm?

Beispielcode:

int i; 
cin>>i>>endl; 
void *obj; 
if(i) 
    obj = new A(); 
else 
    obj = new B(); 
+0

Mögliche Duplikate von [Casting Class Pointer zu Void Pointer] (https://stackoverflow.com/questions/18929225/casting-class-pointer-to-void-pointer) – Tryum

+0

Warum wollen Sie Vererbung vermeiden? Wenn Sie in der Lage sein müssen, eine der beiden Klassen in einer Variablen zu speichern, müssen die Klassen etwas gemeinsam haben. Wenn sie etwas gemeinsam haben, dann ist Vererbung eine natürliche Lösung. –

+0

es nur eine Möglichkeit? aber wenn ich Klasse von Matrix und Klasse von Vector habe? Glaubst du, dass es eine gute Wahl ist, vor allem eine abstrakte Klasse zu erstellen? – icegas

Antwort

0

können Sie std::any oder std::variant je nach Ihren Bedürfnissen nutzen.

Einen Zeiger auf void* zu werfen ist (meistens) eine schlechte Idee, weil Sie den Typ des Objekts verlieren und Sie sich mit roher Zeiger beschäftigen müssen. Was bedeutet, dass Sie Ressourcen verwalten müssen, rufen Sie den richtigen Destruktor ... any und variant tun Sie das für Sie.

würde ich mit variant und nicht any empfehlen, wenn Sie einen besonderen Bedarf für any haben, weil variant geben Ihnen mehr Kontrolle über die Art: Ihr Wert nur eine begrenzte Liste von Typ haben kann.

1

Wenn Sie haben keine Begrenzung der Zeiger nehmen dann zwei Zeiger beiden Klassen zu nehmen und initialisieren die eine nach Eingang.

int i; 
A *a_ptr; 
B *b_ptr; 
cin>>i>>endl; 
if(i) 
    a_ptr = new A(); 
else 
    b_ptr = new B(); 
+0

Ich weiß das, aber kann ich nur einen Zeiger erstellen und Objekt initialisieren, das ich brauche? – icegas

+0

Was machst du mit diesem Zeiger? –

Verwandte Themen