声明一个哺乳动物Mammal类,再由此派生出狗Dog类,两者都定义Speak()成员函数,基类中定义为虚函数。声明一个Dog类对象,调用Speak()函数,观察运行结果。(数据和输出内容自定)
时间: 2024-03-07 12:48:36 浏览: 40
好的,下面是代码示例:
```c++
#include <iostream>
using namespace std;
class Mammal {
public:
virtual void Speak() {
cout << "Mammal speak" << endl;
}
};
class Dog : public Mammal {
public:
void Speak() {
cout << "Dog bark" << endl;
}
};
int main() {
Dog myDog;
myDog.Speak(); // 输出:Dog bark
Mammal* myMammal = &myDog;
myMammal->Speak(); // 输出:Dog bark
return 0;
}
```
首先声明了一个 `Mammal` 类,其中定义了一个虚函数 `Speak()`,并且没有实现。然后我们派生出了一个 `Dog` 类,其中覆盖了基类的 `Speak()` 函数,实现为输出 "Dog bark"。
在 `main()` 函数中,我们创建了一个 `Dog` 类对象 `myDog`,并调用其 `Speak()` 函数,输出 "Dog bark"。接着我们将 `myDog` 对象的地址赋值给一个指向基类 `Mammal` 的指针 `myMammal`,并调用其 `Speak()` 函数,此时由于 `Mammal::Speak()` 是虚函数,因此会动态绑定到 `Dog::Speak()` 函数上,输出 "Dog bark"。
相关推荐
![text/x-c++](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)