吃透C++多态+案例实现
前言:
想要学明白多态,得先学分装和继承。
多态的概念:
同一个行为,作用于不同对象,产生不同的实现效果。
简单来讲就是,多个对象可以共用一个特性,用同一个接口实现,每个特性实现的具体情况由对象决定。比如:猫和狗都会叫,叫这个行为就是一个特性,猫是喵,狗是汪,由实际对象决定。
多态的作用
1. 代码超级好扩展
以后新增「猪、鸡、鸭」类,不用改原有代码,只需要新建子类、重写方法即可,符合开闭原则。
2. 统一调用接口
外部只需要认识父类接口,不用管是猫是狗,代码简洁易懂。
3. 解耦代码
把「行为定义」和「行为实现」分开,代码维护成本极低。
耦合度:指的是代码内部关联程度的大小。如果耦合度高,改这处则容易影响别处,易出错。
多态的初步实现
一、三个必要前提
- 有继承
- 重写父类
虚函数 - 父类指针指向子类对象
二、简单代码
#include<iostream>usingnamespacestd;// 父类structAnimal{// 虚函数,开启多态virtualvoidshout(){cout<<"动物发出声音"<<endl;}};// 子类猫classCat:publicAnimal{public:// 重写虚函数voidshout()override{cout<<"喵~"<<endl;}};// 子类狗classDog:publicAnimal{public:voidshout()override{cout<<"汪!"<<endl;}};intmain(){// 父类指针指向子类对象(向上转型)Animal*a1=newCat();Animal*a2=newDog();// 同一个接口 shout(),不同对象不同实现 → 多态a1->shout();// 喵~a2->shout();// 汪!deletea1;deletea2;return0;}三、 三个简单多态案例
- 动物园
- 班级
- 计算器
