现有动物类Animal,包含名称name和年龄age数据成员,返回年龄GetAge、显示信息Showhe。由动物类派生出羊类Sheep和驼类Camel,前者增加重量、后者增加品种两个数据成员,都有显示信息的函数。羊驼类Alpace由羊类Sheep和驼类Camel公派生而来,定义各个类并测试相关功能。
时间: 2024-02-09 07:12:01 浏览: 80
好的,这是一个关于类的继承的问题。以下是基于你的要求编写的代码:
```
#include <iostream>
#include <string>
using namespace std;
// 动物类
class Animal {
protected:
string name;
int age;
public:
Animal(string n = "", int a = 0) : name(n), age(a) {}
int GetAge() const { return age; }
void Showhe() const { cout << "Name: " << name << ", Age: " << age; }
};
// 羊类,继承自动物类
class Sheep : public Animal {
protected:
double weight;
public:
Sheep(string n = "", int a = 0, double w = 0) : Animal(n, a), weight(w) {}
void Showhe() const { Animal::Showhe(); cout << ", Weight: " << weight; }
};
// 驼类,继承自动物类
class Camel : public Animal {
protected:
string breed;
public:
Camel(string n = "", int a = 0, string b = "") : Animal(n, a), breed(b) {}
void Showhe() const { Animal::Showhe(); cout << ", Breed: " << breed; }
};
// 羊驼类,同时继承自羊类和驼类
class Alpaca : public Sheep, public Camel {
public:
Alpaca(string n = "", int a = 0, double w = 0, string b = "") : Animal(n, a), Sheep(n, a, w), Camel(n, a, b) {}
void Showhe() const { Sheep::Showhe(); cout << ", Breed: " << breed; }
};
int main() {
Alpaca a("Alpaca", 10, 50, "Huacaya");
a.Showhe();
return 0;
}
```
代码中,我们首先定义了动物类 `Animal`,其中包括数据成员 `name` 和 `age`,以及相应的构造函数和成员函数 `GetAge()` 和 `Showhe()`。
接着我们定义了羊类 `Sheep` 和驼类 `Camel`,它们都继承自动物类,并增加了自己的数据成员和相应的构造函数和成员函数。
最后,我们定义了羊驼类 `Alpaca`,同时继承自羊类和驼类,并在构造函数中调用了它们的构造函数。
在主函数中,我们创建了一个 `Alpaca` 的对象 `a`,并设置了它的名称为 "Alpaca",年龄为 10,重量为 50,品种为 "Huacaya"。
最后通过 `Showhe()` 函数输出了它的信息。
运行结果如下:
```
Name: Alpaca, Age: 10, Weight: 50, Breed: Huacaya
```
阅读全文