Wenn ich eine Klasse sagenC++ - Parameter einer rein virtuellen Funktion
class Base {
public:
virtual void func() = 0;
};
, dass die Basis für zwei weitere Klassen ist
class DerivedA1 : public Base {
public:
virtual bool func(string command);
};
class DerivedB1 : public Base {
public:
virtual void func();
}
class DerivedA2 : public DerivedA1 {
public:
bool func(string command); //This one implements it differently
}; //its base class.
Ist die oben erlaubt? Ich habe func() ohne Parameter deklariert, aber dann benutze ich es mit Parametern. Ich habe eine ähnliche Situation in meinem Code, den ich nicht schreiben kann, denn dies ist es Teil einer Schulaufgabe ist, und bin immer einen Fehler wie
error: no matching function for call to Base::fucn(std::string&)
note: candidate is: virtual bool Base::move();
note: candidate expects 0 arguments, provided 1
Ich will func() zu unterschiedlich in verschiedenen verwendet wird abgeleitete Klassen. Wie kann ich dieses Problem beheben?
Nein, es ist nicht erlaubt. Überschreibungen von 'virtuellen' Funktionen der Basisklasse müssen die exakt gleiche Signatur haben. –
Es gibt ein Konzept namens * contravariance *, das es der abgeleiteten Klasse erlaubt, das Argument der Methode zu ändern (nicht willkürlich), aber das trifft hier nicht zu. Sie könnten * Standardargumente * verwenden: http://en.cppreference.com/w/cpp/language/default_arguments – mike
Sie können eine andere Klasse für den Parameter erstellen. Virtuelles void func (MyBaseParemeterClass *) = 0; – QuentinUK