2017-05-02 3 views
-1

Unten ist mein Code, um einen neuen Benutzer oder ein neues Admin-Objekt in Abhängigkeit von der boolean isAdmin zu erstellen. Das Benutzerobjekt ist das Basisobjekt, von dem admin abgeleitet ist. Ich möchte Benutzer user->adminClasshere wie ich mit den Benutzerfunktionen haben kann. Ich bin nicht sicher, wie ich es ändere, also der Benutzer = neuer Admin erstellt einen Admin und nicht einen Benutzer.Berufung abgeleiteten Klasse mit Basisklasse

User *user; 

if (isAdmin) 
{ 
    user = new Admin(); 
} 
else 
{ 
    user = new User(userLib); //call constructor 

} 

//User User; 
user->loadLibrary(); 
user->displayLibrary(); 
+1

'neue Admin' schafft bereits ein Admin. Vielleicht müssen Sie sich über virtuelle Funktionen informieren, aber es ist schwer zu sagen, ohne zu wissen, welches Problem Sie gerade haben. –

+0

Beachten Sie, dass rohe neue und löschen nicht verwendet werden sollten, lesen Sie über std :: unique_ptr –

+0

Bitte seien Sie klarer, was "user-> AdminClasshier" bedeutet. Möchten Sie auf ein öffentliches Datenmitglied zugreifen? Oder ist das eine Mitgliedsfunktion? –

Antwort

1

Sie vermischen Polymorphismus mit Klassenerweiterung.
In Klassenerweiterung, können Sie nicht einen Zeiger auf eine Basisklasse verwenden Sie herausgefunden mit der erweiterten Klasse zu arbeiten, wie bereits.
Mit Polymorphismus, hat die abgeleitete Klasse die gleiche Schnittstelle, aber mit unterschiedlichen Implementierung, so können Sie nur die Funktion der Basisklasse aufrufen, und es wird auf die Funktion der tatsächlichen Klasse versendet werden, wenn virtuelle Funktionen.

Die Lösung ist nicht, es zu tun: Wenn Sie einen Admin-Benutzer haben, es als eine separate Art von Benutzer behandeln und gibt nicht vor, es mit einigen zusätzlichen Funktionen nur ein normaler Benutzer ist.

keine Lösung, sondern eine Abhilfe ist, den Benutzer Zeiger auf den benötigten Typen und verwenden Sie die neuen Zeiger zu werfen. Verwenden Sie dies jedoch nur, wenn es wirklich benötigt wird.

Verwandte Themen