2017-07-15 4 views
-1

Dies ist eine Frage über Konstruktoren. Zwei C++ Klassen A und B beziehen sich konzeptionell alsNichtstandardkonstruktor für C++ - Klasse, die Mitglied einer anderen Klasse ist?

class A 
{ 
    B b; 
}; 

class B 
{ 
    A *a; 
}; 

Die Frage ist, wenn eine Instanz von A erstellt wird, möchte ich seine Mitglieds B mit einem Zeiger auf A. gebaut werden, damit es B scheint erfordert einen Konstruktor Das hat einen Zeiger auf eine Instanz von A als ein Argument, und dass dieser Konstruktor von B aufgerufen wird, wenn eine Instanz von A erstellt wird, und nicht den Standardkonstruktor von B.

Gibt es eine einfache Möglichkeit, dies zu tun?

+0

Definiere c'tor? Was ist das Problem genau? – StoryTeller

+0

Um zu beginnen, benötigen Sie eine Forward-Deklaration, um das zu tun ... – skypjack

Antwort

1

Mit struct hier nur für die öffentlichen Standardwerte.

struct A; 

struct B { 
    B(A *a_ptr = 0) : a(a_ptr) {} 
    A *a; 
}; 

struct A { 
    A() : b(this) {} 
    B b; 
}; 

Sie möglicherweise eine Warnung im Konstruktor für A von einem Wichtigtuer-Compiler, der this auf ein Objekt erhalten, die noch nicht vollständig aufgebaut ist.

+0

Sie könnten das hinzufügen, struct A a; std :: cout << (aba == & a) << std :: endl; 'wird '1' drucken, um diese Verwendung zu verdeutlichen und zu beweisen, dass es funktioniert: [Probieren Sie es online aus!] (https: // tio. run/## RYxNCsMgFIT3nmKgULSQkHV @ CuYixai0QmKC0W5Czm6NLelbzbz5ZuSyFE8pY7wYK8egNFozr95pMd0JSSJID96cssdGkK6nHDfxWLxDh4qhhqDZMmx7Jo68Ifu/yn9VTg98oP5l1pPuMXxhYz0mYSx9z0axXDn7aS9bVddyDh5tCyrKoRToOlwFOx451VaNmXXaB2dRpe0YPw "C++ (gcc) - Try It Online") –

Verwandte Themen