Angenommen, ich habe Unterricht Foo
und bin so Bar
eingerichtet:
class Foo
{
public:
int x;
virtual void printStuff()
{
std::cout << x << std::endl;
}
};
class Bar : public Foo
{
public:
int y;
void printStuff()
{
// I would like to call Foo.printStuff() here...
std::cout << y << std::endl;
}
};
Wie im Code kommentiert, möchte ich die Funktion der Basisklasse aufrufen können, die ich überschreibe. In Java gibt es die super.funcname()
Syntax. Ist das in C ++ möglich?
Antworten:
Die C ++ - Syntax lautet wie folgt:
quelle
call super requirement
,Ja,
Es ist dasselbe wie
super
in Java, außer dass es das Aufrufen von Implementierungen von verschiedenen Basen aus ermöglicht, wenn Sie mehrere Vererbungen haben.quelle
Manchmal müssen Sie die Implementierung der Basisklasse aufrufen, wenn Sie nicht in der abgeleiteten Funktion sind ... Es funktioniert immer noch:
quelle
x
vom Typ seinBase*
und dieBase::Foo
Syntax verwenden müssen, damit dies funktioniertNur für den Fall, dass Sie dies für viele Funktionen in Ihrer Klasse tun:
Dies kann ein wenig Schreiben sparen, wenn Sie Foo umbenennen möchten.
quelle
Wenn Sie eine Funktion der Basisklasse aus ihrer abgeleiteten Klasse aufrufen möchten, können Sie einfach die überschriebene Funktion mit dem Namen der Basisklasse aufrufen ( wie Foo :: printStuff () ).
Code geht hier
Wieder können Sie zur Laufzeit mithilfe des Objekts dieser Klasse (abgeleitet oder Basis) bestimmen, welche Funktion aufgerufen werden soll. Dies erfordert jedoch, dass Ihre Funktion in der Basisklasse als virtuell markiert ist.
Code unten
quelle
Überprüfen Sie dies...
Ausgabe
Der beste Weg ist, die base :: -Funktion als say @sth zu verwenden
quelle
protected
Vererbung nicht funktionieren . Um einen Basisklassenzeiger umzuwandeln, müssen Sie die öffentliche Vererbung verwenden.Ja, du kannst es nennen. Die C ++ - Syntax zum Aufrufen der übergeordneten Klassenfunktion in der untergeordneten Klasse lautet
Lesen Sie mehr über das Überschreiben von Funktionen .
quelle