编写一个宠物类Pet,包含虚成员函数Speak,显示如下信息“How does a pet speak?”; 定义公有派生类Cat和Dog,其Cat类的Speak成员函数显示:“miao! miao!”,Dog类的Speak成员函数显示:“wang! wang!”。 主函数中定义Pet,Cat和Dog对象,再定义Pet指针变量,分别指向Pet,Cat和Dog对象,并通过指针调用Speak函数,看看会显示什么?
时间: 2024-03-07 16:48:30 浏览: 94
题目:显示宠物信息(Dev C++运行可通过但是会警告)(纯虚函数、父类指针、动态多态性、继承)
好的,这是一个关于C++面向对象编程的问题。以下是解答:
```cpp
#include <iostream>
using namespace std;
class Pet {
public:
virtual void Speak() {
cout << "How does a pet speak?" << endl;
}
};
class Cat : public Pet {
public:
virtual void Speak() {
cout << "miao! miao!" << endl;
}
};
class Dog : public Pet {
public:
virtual void Speak() {
cout << "wang! wang!" << endl;
}
};
int main() {
Pet p;
Cat c;
Dog d;
Pet* ptrP = &p;
Pet* ptrC = &c;
Pet* ptrD = &d;
ptrP->Speak();
ptrC->Speak();
ptrD->Speak();
return 0;
}
```
运行结果:
```
How does a pet speak?
miao! miao!
wang! wang!
```
解释:
首先定义了一个Pet基类,包含虚函数Speak。然后定义了Cat和Dog两个公有派生类,分别重写了Speak函数。
在主函数中,定义了Pet、Cat和Dog三个对象,并分别用Pet指针变量指向它们。然后通过指针调用Speak函数,由于基类Speak函数是虚函数,因此会根据指针指向的对象类型来选择调用哪个Speak函数。最终输出的结果就是Pet对象调用基类的Speak函数,Cat对象调用Cat类的Speak函数,Dog对象调用Dog类的Speak函数。
阅读全文