现有动物类Animal,包含名称name和年龄age数据成员,返回年龄GetAge、显示信息Showhe。由动物类派生出羊类Sheep和驼类Camel,前者增加重量、后者增加品种两个数据成员,都有显示信息的函数。羊驼类Alpace由羊类Sheep和驼类Camel公派生而来,定义各个类并在主函数内定义对象测试相关功能。
时间: 2024-02-13 08:03:15 浏览: 45
好的,我理解了你的问题。下面是相应的代码:
```cpp
#include<iostream>
#include<string>
using namespace std;
class Animal {
protected:
string name;
int age;
public:
Animal(string s, int a) : name(s), age(a) {}
int GetAge() { return age; }
virtual void Showhe() { cout << "Name: " << name << ", Age: " << age << endl; }
};
class Sheep : public Animal {
private:
int weight;
public:
Sheep(string s, int a, int w) : Animal(s, a), weight(w) {}
void Showhe() { cout << "Name: " << name << ", Age: " << age << ", Weight: " << weight << endl; }
};
class Camel : public Animal {
private:
string breed;
public:
Camel(string s, int a, string b) : Animal(s, a), breed(b) {}
void Showhe() { cout << "Name: " << name << ", Age: " << age << ", Breed: " << breed << endl; }
};
class Alpaca : public Sheep, public Camel {
public:
Alpaca(string s, int a, int w, string b) : Sheep(s, a, w), Camel(s, a, b), Animal(s, a) {}
void Showhe() { cout << "Name: " << name << ", Age: " << age << ", Weight: " << Sheep::weight << ", Breed: " << Camel::breed << endl; }
};
int main() {
Sheep s("Dolly", 2, 50);
Camel c("Khan", 5, "Bactrian");
Alpaca a("Paca", 3, 40, "Huacaya");
s.Showhe();
c.Showhe();
a.Showhe();
return 0;
}
```
解释一下代码:
- Animal类是基类,包含名称name和年龄age数据成员,以及返回年龄GetAge和显示信息Showhe两个成员函数。
- Sheep和Camel类继承自Animal类,分别增加重量weight和品种breed两个数据成员,并重写Showhe函数。
- Alpaca类继承自Sheep和Camel类,同时还继承了Animal类,因为它需要调用Animal类的构造函数,以初始化name和age数据成员。它还重写Showhe函数,以显示所有四个数据成员。
- 在主函数中,我们创建了一个Sheep对象、一个Camel对象和一个Alpaca对象,并分别调用它们的Showhe函数,以测试相关功能。
希望能够帮到你!
阅读全文