声明一个Animal类,派生出Dog类和Cat类,三个类中都定义Speak函数,其中基类中的Speak函数为虚函数。写出主函数并实现运行时的多态
时间: 2024-02-21 18:00:46 浏览: 94
以下是实现所需的代码:
```c++
#include<iostream>
using namespace std;
class Animal{
public:
virtual void Speak(){
cout<<"动物在叫"<<endl;
}
};
class Dog : public Animal{
public:
void Speak(){
cout<<"汪汪汪"<<endl;
}
};
class Cat : public Animal{
public:
void Speak(){
cout<<"喵喵喵"<<endl;
}
};
int main(){
Animal *pAnimal = NULL;
Dog dog;
Cat cat;
pAnimal = &dog;
pAnimal->Speak();
pAnimal = &cat;
pAnimal->Speak();
return 0;
}
```
我们声明了一个抽象的动物类`Animal`,并在其中定义了一个虚函数`Speak`,该函数在派生类中也被重新定义。我们通过`Dog`和`Cat`类分别派生自`Animal`类,分别实现了`Speak`函数。
在主函数中,我们声明了一个指向`Animal`类的指针`pAnimal`,并将其初始化为`NULL`,同时创建了`Dog`和`Cat`的实例。
接下来,我们让`pAnimal`指向`Dog`的实例,并调用`Speak`函数,这时候会输出`汪汪汪`。然后让`pAnimal`指向`Cat`的实例,并调用`Speak`函数,输出`喵喵喵`。
这里的多态性体现在,通过指向基类的指针,我们可以在运行时指定调用哪个派生类的函数,从而实现了多态。这是面向对象编程中非常重要的一个概念。
阅读全文