声明一个Animal类,派生出Dog类和Cat类,三个类中都定义Speak函数,其中基类中的Speak函数为虚函数。写出主函数并实现运行时的多态。
时间: 2024-03-10 08:43:47 浏览: 14
下面是Animal类、Dog类和Cat类的定义以及主函数的实现:
```cpp
#include <iostream>
using namespace std;
class Animal {
public:
virtual void Speak() {
cout << "Animal speaks" << endl;
}
};
class Dog : public Animal {
public:
void Speak() {
cout << "Dog barks" << endl;
}
};
class Cat : public Animal {
public:
void Speak() {
cout << "Cat meows" << endl;
}
};
int main() {
Animal* animalPtr;
Dog dog;
Cat cat;
animalPtr = &dog;
animalPtr->Speak();
animalPtr = &cat;
animalPtr->Speak();
return 0;
}
```
在这个例子中,Animal类是一个基类,Dog类和Cat类都是从它派生出来的。基类中的Speak函数被声明为虚函数,这意味着派生类可以覆盖它。在派生类中,我们分别定义了Dog的Speak函数和Cat的Speak函数。
在主函数中,我们首先定义了一个Animal指针animalPtr,然后将它指向一个Dog对象,调用animalPtr的Speak函数,输出"Dog barks"。接着我们把指针animalPtr指向一个Cat对象,再次调用animalPtr的Speak函数,输出"Cat meows"。
这个例子展示了运行时多态的实现。在编译时,编译器无法确定animalPtr指向哪个对象,因此需要在运行时动态地确定调用哪个Speak函数。这正是虚函数的作用。