This code refuses to print the appropriate messages to the console when I run it. Using pointers instead of references seems to work (-> instead of .). I am new to OOP so forgive me if you find this ridiculous.
#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
}
 
     
     
     
     
     
    