定义一个基类“Pet”,类内有数据成员name(表示宠物名字),有获取宠物名字的函数,有一个纯虚函数call(),实现往屏幕输出宠物的叫声。同时类内有至少一个构造函数。 从Role类派生出一个宠物狗类“Dog”和宠物猫类“Cat”,要求每个派生类要至少定义一个构造方法,并重新定义call()函数。
时间: 2024-03-20 10:42:01 浏览: 64
下面是一个基类 `Pet` 和两个派生类 `Dog` 和 `Cat` 的实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
class Pet {
protected:
string name; // 宠物名字
public:
// 构造函数
Pet(string n) : name(n) {}
// 获取宠物名字
string getName() {
return name;
}
// 纯虚函数
virtual void call() = 0;
};
class Dog : public Pet {
public:
// 构造函数
Dog(string n) : Pet(n) {}
// 重写基类的call函数
void call() {
cout << name << "汪汪叫!" << endl;
}
};
class Cat : public Pet {
public:
// 构造函数
Cat(string n) : Pet(n) {}
// 重写基类的call函数
void call() {
cout << name << "喵喵叫!" << endl;
}
};
int main() {
// 创建狗和猫对象并调用call函数
Dog dog("旺财");
Cat cat("小白");
dog.call();
cat.call();
return 0;
}
```
在这个例子中,我们定义了一个基类 `Pet`,其中包含了一个宠物名字的数据成员 `name` 和一个纯虚函数 `call`。派生类 `Dog` 和 `Cat` 分别继承了基类 `Pet`,并重写了 `call` 函数。
在 `main` 函数中,我们创建了一个狗对象 `dog` 和一个猫对象 `cat`,并分别通过构造函数设置宠物名字。然后,我们调用这两个对象的 `call` 函数,分别输出宠物的叫声。注意,由于 `call` 函数是基类中的纯虚函数,因此必须在派生类中进行重写,否则编译会报错。
阅读全文