#include using std::cout; using std::endl; using std::ostream; #include using std::string; class Henkilo { protected: string nimi; public: Henkilo(const string &n) : nimi(n) {} string kerro_nimi() const { return " h "+nimi; } virtual string vkerro_nimi() const { return " h "+nimi; } friend ostream& operator<< (ostream &out, const Henkilo &h); unsigned tunnus; }; ostream& operator<< (ostream &out, const Henkilo &h) { out << h.nimi << " tunnus " << h.tunnus; return out; } class Palkollinen : public Henkilo { public: Palkollinen(const string &n) : Henkilo(n) {} string kerro_nimi() const { return " p "+nimi; } virtual string vkerro_nimi() const { return " p "+nimi; } unsigned tunnus; }; int main(void) { Palkollinen *p = new Palkollinen("Veijo"); Henkilo *h=p; p->tunnus=1234; h->tunnus=9876; cout << p->kerro_nimi() << " tunnus " << p->tunnus << endl; cout << h->kerro_nimi() << " tunnus " << h->tunnus << endl; cout << p->vkerro_nimi() << endl; cout << h->vkerro_nimi() << endl; return 0; }