Wie nennen die Originale Funktion nach dem überschreiben in C++?
Ich serialisieren, die meisten meiner Klassen mit zwei Funktionen read() und write(). Was ich möchte, zu tun haben, ist das read/write () - Funktion der Basisklasse aufgerufen, aus den Unterklassen so, dass ich mich nicht zu wiederholen, die Serialisierung-code mehrere Male.
Beispiel:
class Base
{
public:
base();
virtual read(QDataStream&);
virtual write(QDataStream&);
private:
int a, b, c, d;
}
class Sub : public Base
{
public:
Sub();
read(QDataStream&);
write(QDataStream&);
private:
int e, f, g, h;
}
So, in diesem Beispiel möchte ich den code zum Lesen/schreiben a,b,c,d zu kommen von der Basis. Sub wäre dann call Base::read(QDataStream&) und dann hinzufügen, was Attribute sind einzigartig Sub. So bin ich nicht wiederholen Sie den serialisierungscode für jede Unterklasse (und möglicherweise vergessen, dies zu tun).
- Beachten Sie, dass dies ist, heißt eigentlich "überschreiben" der Methode. "Überladen" ist, wenn Sie mehrere Methoden, die den gleichen Namen aber unterschiedliche Typen der Argumente. Zum Beispiel wird eine string-Klasse könnte überlastung operator+() zu geben, der + - operator Bedeutung, wenn strings beteiligt sind.
- Sie sollten versuchen, um die Beispiele korrekt. Die member-Funktionen fehlt, sind die Rückgabewerte der Typ heißt
Base
, aber es scheint einbase
Konstruktor... - danke für die Klärung Caleb.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie call-base-class-Funktionen, indem die Funktion rufen Sie mit der base-class-identifier, gefolgt vom scope-operator (::).
Wie diese:
EDIT: Hinweis entfernt auf Anfrage.
Erstens - die Ihre member-Funktionen haben keine Rückgabe-Typen - nicht gültig in C++ mit dem compiler möglicherweise beschweren sich über "Standard int' Verhalten und lassen Sie es durchgehen, aber sollte man Ihnen Rückkehr-Typen (ich verwende
void
als Platzhalter).Können Sie Umfang beheben, und verwenden Sie die parent-Klasse-version, wenn man in einer Unterklasse: