Dieser Code verweigert das Drucken der entsprechenden Meldungen an die Konsole, wenn ich sie ausführe. Die Verwendung von Zeigern anstelle von Referenzen scheint zu funktionieren (-> statt.). Ich bin neu bei OOP, also vergib mir, wenn du das lächerlich findest.Aufrufen virtueller Funktionen durch einen Verweis auf die Basisklasse
#include <iostream>
using namespace std;
class instrument {
public:
virtual void play(){}
};
class drum : public instrument {
public:
void play(){
cout << "dum, dum" << endl;
}
};
class piano : public instrument {
public:
void play(){
cout << "pling" << endl;
}
};
int main(){
instrument i;
piano p;
drum d;
instrument &pi = i;
pi.play(); // -
pi = p;
pi.play(); // pling
pi = d;
pi.play(); // dum, dum
}
Sie können einen Verweis auf das Objekt, auf das er verweist, nicht ändern, nachdem er bei der Initialisierung gebunden wurde. Gerade jetzt Ihre Feuerzuweisung Betreiber (und Auslösung [Objekt Slicing] (http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c/274634#274634) in den Prozess). – WhozCraig
Machen Sie das eine Antwort, werden Sie, Herr? – jrok
Ein Nebenproblem, aber Sie müssen einen virtuellen Destruktor in der Basisklasse erstellen. –