#include #include using namespace std; class AnimalT { public: virtual ~AnimalT() = default; virtual void Birthday() = 0; virtual int Age() { return age; } virtual void Move() { cout << "I am moving as an animal" << endl; } protected: int age{0}; }; class BirdT: public virtual AnimalT { //class BirdT: public AnimalT { public: int Age() override { cout << "My Age as a bird is " << AnimalT::Age() << endl; return age; } void Birthday() override { cout << "tweet tweet I am two years older" << endl; age += 2; } }; class DogT: public virtual AnimalT { //class DogT: public AnimalT { public: int Age() override { cout << "My Age as a dog is " << AnimalT::Age() << endl; return age; } void Birthday() override { cout << "woof woof, I am a year older" << endl; age += 1; } }; class BirdDogT: public BirdT, public DogT { public: int Age() override { BirdT::Age(); DogT::Age(); // return BirdT::age + DogT::age; return age; } void Birthday() override{ BirdT::Birthday(); DogT::Birthday(); } }; int main() { BirdDogT pet; cout << "New Pet" << endl; pet.Age(); cout << endl << endl; cout << "Happy Birthday dear pet" << endl; pet.Birthday(); pet.Age(); cout << endl << endl; cout << "I am going to move " << endl; // I didn't know you could do this! pet.DogT::Move(); pet.BirdT::Move(); pet.AnimalT::Move(); pet.Move(); return 0; }