Zitat von
Torpedo:
Wie geht das?
Also ungefähr so:
cTier *lieblingstier = new cGoldfisch("Goldi");
Genau so.
Zitat von
Torpedo:
Geht aber leider nicht.
Warum nicht?
Kann es sein, daß du übersehen hast, daß Basisklassen standardmäßig private sind und explizit als public deklariert werden müssen?
Code:
class cTier { ... };
class cGoldfisch : public cTier { ... };
Zitat von
xy124:
ich glaub der fehler ist das leerzeichen und der stern Wink
Zitat:
cTier *lieblingstier = new cGoldfisch("Goldi");
ist falsch.
probier' mal
Code: markieren
cTier* lieblingstier = new cGoldfisch("Goldi");
^^der stern muss hinter den klassenname und nicht vor den objektname!
Unfug. Ob zwischen Operatoren und Bezeichnern Leerzeichen sind, ist vollkommen irrelevant, wie in Delphi übrigens auch.
Zitat von
jfheins:
cTier *lieblingstier = (cTier)new cGoldfisch("Goldi");
Was genau hast du da vor? cGoldfisch -> cTier -> cTier*?
Zitat von
Torpedo:
Aber irgendwann muss sich wissen was es für eine Klasse ist, sonst kann ich die Funktionen, die nur zu der Klasse gehören nicht benutzen...
Dafür gibt es dynamic_cast<>.
Der Cast nach der Art (Typ)Ausdruck nennt sich "C-Cast" und ist in C++ zu Recht verpönt. Man nehme static_cast<> oder dynamic_cast<>.