it-swarm.com.de

Übergeben Sie den Parameter an den Basisklassenkonstruktor, während Sie das Abgeleitete Klassenobjekt erstellen

Betrachten Sie zwei Klassen A und B

class A
{
public:
    A(int);
    ~A();
};

class B : public A
{
public:
    B(int);
    ~B();
};


int main()
{
    A* aobj;
    B* bobj = new bobj(5);    
}

Nun erbt die Klasse BA.

Ich möchte ein Objekt von B erstellen. Mir ist bekannt, dass beim Erstellen eines abgeleiteten Klassenobjekts auch der Konstruktor der Basisklasse aufgerufen wird. Dies ist jedoch der Standardkonstruktor ohne Parameter.

Was ich will ist, dass B einen Parameter übernimmt (sagen wir 5) und ihn an den Konstruktor von A..__ übergeben.

21
CodeCrusader

Basiselementinitialisierung verwenden:

class B : public A
{
public:
    B(int a) : A(a)
    {
    }
    ~B();
};
32
Bathsheba
B::B(int x):A(x)
{
    //Body of B constructor
}
12

Wenn Sie den Konstruktor für abgeleitete Klassen verwenden, um nur Argumente an die Basisklasse zu übergeben, können Sie dies in C++ 11 auch kürzer ausführen:

class B : public A
{
    using A::A;
};

Beachten Sie, dass ich noch nicht einmal einen "öffentlichen" Zugriffsspezifizierer verwendet habe. Dies ist nicht erforderlich, da geerbte Konstruktoren implizit mit derselben Zugriffsebene wie in der Basisklasse deklariert werden.

Weitere Informationen finden Sie in Abschnitt Inheriting Constructors unter: https://de.cppreference.com/w/cpp/language/using_declaration

Sie können auch auf https://softwareengineering.stackexchange.com/a/307648 verweisen, um die Einschränkungen bei der Vererbung von Konstruktoren zu verstehen.

3
Mandeep Singh

klasse A {public: int aval;

A(int a):aval(a){};
~A();

};

klasse B: public A {public: int bval;

B(int a,int b):bval(a),A(b){};
~B();

};

int main () {

  B *bobj = new bobj(5,6);
//or 
  A *aobj=new bobj(5,6); 

}

In diesem Fall weisen Sie die Werte für Basisklasse und abgeleitete Klasse zu.

0
Wilson