声明一个Animal类,派生出Dog类和Cat类,三个类中都定义Speak函数,其中基类中的Speak函数为虚函数。写出主函数并实现运行时的多态。
时间: 2024-03-10 18:43:42 浏览: 80
以下是实现Animal类、Dog类和Cat类的代码:
```c++
#include <iostream>
using namespace std;
class Animal {
public:
virtual void Speak() { // 基类中的Speak函数为虚函数
cout << "Animal speaks" << endl;
}
};
class Dog : public Animal {
public:
void Speak() { // 派生类中的Speak函数
cout << "Dog barks" << endl;
}
};
class Cat : public Animal {
public:
void Speak() { // 派生类中的Speak函数
cout << "Cat meows" << endl;
}
};
int main() {
Animal *a; // 定义基类指针
Dog d; // 定义派生类对象
Cat c; // 定义派生类对象
a = &d; // 指向派生类对象
a->Speak(); // 调用Speak函数,会输出 "Dog barks"
a = &c; // 指向另一个派生类对象
a->Speak(); // 调用Speak函数,会输出 "Cat meows"
return 0;
}
```
在主函数中,我们首先定义了一个基类指针 `a`,然后分别用派生类对象 `d` 和 `c` 初始化它。接着,通过指针调用 `Speak` 函数,会根据指针所指向的对象类型来调用相应的函数,实现了运行时的多态。注意,这里的 `Speak` 函数需要在基类中声明为虚函数,才能实现多态。
阅读全文