多态-动物的面向对象
时间: 2024-12-30 21:26:52 浏览: 11
### 面向对象编程中的动物类多态概念
在面向对象编程中,多态允许程序定义一个接口并有多种不同的实现方式。对于`Animal`类及其子类而言,这意味着可以通过相同的接口调用不同行为的方法。
#### 定义基类 `Animal`
创建一个名为`Animal`的基础抽象类,在其中声明了一个纯虚函数`speak()`用于表示发声动作:
```cpp
#include <iostream>
using namespace std;
class Animal {
public:
virtual void speak() = 0; // 纯虚函数
};
```
此部分代码展示了如何构建一个多态性的基础框架[^1]。
#### 创建具体子类
接着分别派生出两个具体的子类`Dog`和`Cat`,它们都覆写了来自父类的`speak()`方法以提供各自特有的声音输出逻辑:
```cpp
// Dog 继承自 Animal 并实现了 speak()
class Dog : public Animal {
public:
void speak() override { cout << "Woof!" << endl; }
};
// Cat 同样继承自 Animal 并给出了自己的 speak() 版本
class Cat : public Animal {
public:
void speak() override { cout << "Meow!" << endl; }
};
```
上述例子说明了通过继承机制来扩展基本功能的同时也体现了多态特性[^2]。
#### 使用多态性
下面这段代码片段演示了怎样利用指针或引用指向不同类型的实际实例从而达到一次编写即可适用于所有情况的效果:
```cpp
int main(){
Animal* myAnimals[] = {new Dog(), new Cat()};
for(int i=0;i<2;++i){
myAnimals[i]->speak(); // 调用了相应子类版本的 speak 函数
}
// 清理资源
delete myAnimals[0];
delete myAnimals[1];
return 0;
}
```
这里的关键在于即使数组元素被声明为`Animal *`类型,但在实际执行过程中却能够自动识别其真实身份进而调用对应的成员函数[^3]。
阅读全文