#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
#include <string>
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;
}