#include using namespace std; class PlayerT { public: virtual void Name(string newName) { name = newName; } virtual string Name() const { return name; } virtual void Announce() const { cout << "I am known as " << Name() << endl; } private: string name; }; class FighterT: virtual public PlayerT { public: void Name(string newName) override { cout << " setting my fighter name " << endl; PlayerT::Name( newName + " Fighter"); } string Name() const override { return PlayerT::Name(); } void Announce() const override { cout << "I am known as: " << endl; cout << "\t" << Name() << endl; cout << "\t" << PlayerT::Name() << endl; } }; class WizardT: virtual public PlayerT{ public: void Name(string newName) override { cout << " setting my wizard name " << endl; PlayerT::Name( newName + " Wizard"); } string Name() const override { return PlayerT::Name(); } void Announce() const override { cout << "I am known as: " << endl; cout << "\t" << Name() << endl; cout << "\t" << PlayerT::Name() << endl; } }; class FighterWizardT: public FighterT, public WizardT { public: void Name(string newName) override { cout << "Setting my fighter-wizard name " << endl; //FighterT::Name( newName + " Fighter-Wizard"); //WizardT::Name( newName + " Fighter-Wizard"); PlayerT::Name( newName + " Fighter-Wizard"); } string Name() const override { return PlayerT::Name(); } void Announce() const override { cout << " I am know as: " << endl; cout << "\t" << PlayerT::Name() << endl; cout << "\tfighter: " << FighterT::Name() << endl; cout << "\twizard: " << WizardT::Name() << endl; } }; int main() { cout << "The FighterWizard" << endl; FighterWizardT player1; player1.WizardT::Name("Walt"); player1.FighterT::Name("Fred"); player1.Name("Bob"); cout << endl << " Let me tell you who I am " << endl; cout << " I am " << player1.Name() << endl; player1.Announce(); cout << endl << endl; return 0; }