Questo codice si rifiuta di stampare i messaggi appropriati sulla console quando viene eseguito. Usare i puntatori invece dei riferimenti sembra funzionare (-> invece di.). Sono nuovo di OOP quindi perdonami se trovi questo ridicolo.Chiamare funzioni virtuali tramite un riferimento alla classe base
#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
}
Non è possibile modificare un riferimento dall'oggetto a cui fa riferimento una volta associato all'inizializzazione. In questo momento i tuoi operatori di assegnazione di attivazione (e attivazione di [object slicing] (http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c/274634#274634) nel processo). – WhozCraig
Fai una risposta, vero signore? – jrok
Un problema secondario, ma è necessario creare un distruttore virtuale nella classe base. –