//résolution dynamique des liens methode virtuelle + ref. ou pointeur #include using namespace std; class Personnage { private: string nom; public: Personnage (); virtual string get_nom() const; virtual void rencontrer(const Personnage& p) const { cout << "Bonjour !" << endl; }; }; Personnage::Personnage ():nom("Personnage "){}; string Personnage::get_nom() const{return nom;}; //---------------------------------------------------------------------- class Guerrier : public Personnage { private: string nom; public: Guerrier(); string get_nom() const; void rencontrer(const Personnage& p) const; }; Guerrier::Guerrier ():nom("Guerrier"){}; string Guerrier::get_nom() const{return nom;}; void Guerrier::rencontrer(const Personnage& p) const{ cout << "Boum !" << endl; } //---------------------------------------------------------------------- class Voleur : public Personnage { private: string nom; public: Voleur (); string get_nom() const; void rencontrer(const Personnage& p) const; }; Voleur::Voleur ():nom("Voleur"){}; string Voleur::get_nom() const{return nom;}; void Voleur::rencontrer(const Personnage& p) const{ cout << "je te pique le sous!" << endl; } //---------------------------------------------------------------------- //---------------------------------------------------------------------- void faire_rencontrer(Personnage const& un,Personnage const& autre) { cout << un.get_nom() << " rencontre "<< autre.get_nom() << " : "; un.rencontrer(autre); } //---------------------------------------------------------------------- int main() { Guerrier g; Voleur v; Personnage p1; Personnage p2; faire_rencontrer(g, v); faire_rencontrer(p1, p2); }