#include <iostream>
using namespace std;
class Musician {
public:
void greet() {cout <<"Musician says : Hello\n";}
virtual void play() {cout <<"Musician plays : Mmm mmm\n";}
};
class Trumpeter : public Musician {
public:
void greet() {
cout <<"Trumpeter says : What's up\n";
}
void play() {
cout <<"Trumpeter plays : Toot toot\n";
}
};
class Flutist : public Musician {
public:
void greet() {cout <<"Flutist says: how do you do\n";}
void play() {cout <<"Flutist plays: tweet tweet \n";}
};
int main(int argc, char* argv[]){ Musician m, *pm;
Trumpeter t;
Flutist f;
m.greet(); m.play();
t.greet(); t.play();
f.greet(); f.play();
pm = &t; pm->greet(); pm->play();
pm = &f; pm->greet(); pm->play();
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2xhc3MgTXVzaWNpYW4geyAKICAgcHVibGljOgogICAgICB2b2lkIGdyZWV0KCkge2NvdXQgPDwiTXVzaWNpYW4gc2F5cyA6IEhlbGxvXG4iO30KICAgICAgdmlydHVhbCB2b2lkIHBsYXkoKSB7Y291dCA8PCJNdXNpY2lhbiBwbGF5cyA6IE1tbSBtbW1cbiI7fQp9OwpjbGFzcyBUcnVtcGV0ZXIgOiBwdWJsaWMgTXVzaWNpYW4gewogICBwdWJsaWM6CiAgICAgICB2b2lkIGdyZWV0KCkgewogICAgICAgICAgICAgICAgY291dCA8PCJUcnVtcGV0ZXIgc2F5cyA6IFdoYXQncyB1cFxuIjsKICAgICAgIH0gCiAgICAgICB2b2lkIHBsYXkoKSB7CiAgICAgICAgICAgIGNvdXQgPDwiVHJ1bXBldGVyIHBsYXlzIDogVG9vdCB0b290XG4iOwogICAgICAgfSAKIH07CmNsYXNzIEZsdXRpc3QgOiBwdWJsaWMgTXVzaWNpYW4geyAKICAgcHVibGljOgogICAgICAgdm9pZCBncmVldCgpIHtjb3V0IDw8IkZsdXRpc3Qgc2F5czogaG93IGRvIHlvdSBkb1xuIjt9CiAgICAgICAgdm9pZCBwbGF5KCkge2NvdXQgPDwiRmx1dGlzdCBwbGF5czogdHdlZXQgdHdlZXQgXG4iO30KfTsKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSl7IE11c2ljaWFuIG0sICpwbTsKVHJ1bXBldGVyIHQ7CkZsdXRpc3QgZjsKICAgIG0uZ3JlZXQoKTsgbS5wbGF5KCk7CiAgICB0LmdyZWV0KCk7IHQucGxheSgpOwogICAgZi5ncmVldCgpOyBmLnBsYXkoKTsKICAgIHBtID0gJnQ7IHBtLT5ncmVldCgpOyBwbS0+cGxheSgpOwogICAgcG0gPSAmZjsgcG0tPmdyZWV0KCk7IHBtLT5wbGF5KCk7Cn0=