class HERB {
public:
double appet;
HERB(double appet) : appet(appet) { cout << "A herb is born." << endl; }
virtual ~HERB() { cout << "A herb is dead." << endl; }
virtual void Show() { cout << "I need " << appet << " kg food." << endl; }
};
class HORSE :virtual public HERB {
public:
double speed;
HORSE(double appet, double speed) : HERB(appet), speed(speed) { cout << "A horse is born." << endl; }
~HORSE() { cout << "A horse is dead." << endl; }
void Show() override { cout << "I need " << appet << " kg food, I can run at " << speed << " km/h." << endl; }
};
class DONKEY :virtual public HERB {
public:
double load;
DONKEY(double appet, double load) : HERB(appet), load(load) { cout << "A donkey is born." << endl; }
~DONKEY() { cout << "A donkey is dead." << endl; }
void Show() override { cout << "I need " << appet << " kg food, I can carry " << load << " kg load." << endl; }
};
class MULE : public HORSE, public DONKEY {
public:
MULE(double appet, double speed, double load) : HERB(appet), HORSE(appet, speed), DONKEY(appet, load) {
cout << "A mule is born." << endl;
}
~MULE() { cout << "A mule is dead." << endl; }
void Show() override {
cout << "I need " << appet << " kg food, I can run at " << speed << " km/h, I can carry " << load << " kg load."
<< endl;
}
};