2016-05-16 8 views
0

ich folgendes Problem habe.Ändern Verschachtelte Klassen in Abgeleitete Klasse C++ 11

Ich habe eine Klasse Basis mit einer verschachtelten Klasse A. Ich möchte eine dritte Klasse außerhalb von Base abgeleitet machen, die es erbt. Allerdings muss ich einige Member-Variablen hinzufügen, sowie einige der Methoden der geschachtelten Klasse (namentlich Konstruktoren, um sie zu initialisieren) ändern, konnte aber nicht herausfinden, wie.

Eine Möglichkeit habe ich es geschafft, es zu bekommen, um etwas Arbeit eine neue verschachtelte Klasse innerhalb Abgeleitet zu erklären war, die von erbt A aber das verwirrt mich als von dem, was tatsächlich geschieht. Ich habe den Eindruck, dass ich dann tatsächlich zwei verschachtelte Klassen habe, was ich nicht will.

class Base 
{ 
    class A 
    { 
     //memberVariables 
    public: 
     A() 
     { 
      //initialize memberVariables 
     } 
    } 
} 

class Derived : public Base 
{ 
    class B : public A 
    { 
     //newMemberVariables 
    public: 
     B() : A() 
     { 
      //initialize newMemberVariables 
     } 
    } 
} 

Gibt es einen besseren Weg, oder sollte ich dabei bleiben? Danke im Voraus.

+0

Oben, meinst du eigentlich sagen 'newMemberVariables' sind Mitglieder Abgeleitete (und nicht B) ... aber Sie erwarten, dass sie die Initialisierung B Konstruktor sein? In diesem Fall haben Sie Recht, dass es nicht funktioniert. Abgeleitet sollte seine eigenen Mitgliedsvariablen initialisieren. Aber im Allgemeinen ist nicht klar, was Sie fragen. – HostileFork

+0

Bearbeitet. War in der Tat ein Fehler auf meiner Seite. Sie sollen in B sein. Ich frage, ob es möglich ist, A in Derived zu erweitern, anstatt eine neue Klasse zu erstellen. –

+1

Es gibt eine und nur eine Möglichkeit, 'Abgeleitete' können von" Basis "übernommene Elemente ändern, nämlich * in Base * definierte virtuelle Funktionen überschreiben. –

Antwort

0

Mit C++ ist es nicht möglich, zu ‚erweitern‘ eine Klasse Erklärung, ob die Klasse verschachtelt ist oder nicht. Also auf Ihre Frage in den Kommentaren:

Was ich frage ist, ob es möglich A zu erweitern in Abgeleitet statt Erstellen einer neuen Klasse ist

Die Antwort ist nein. Sie sind richtig, dass Ihre Lösung, die Klasse B als abgeleitete Klasse von Base::A definiert, in der Tat ist eine weitere verschachtelte Klasse zu schaffen.