吃透C++多态+案例实现

前言:

想要学明白多态,得先学分装和继承。

多态的概念:

同一个行为,作用于不同对象,产生不同的实现效果。
简单来讲就是,多个对象可以共用一个特性,用同一个接口实现,每个特性实现的具体情况由对象决定。比如:猫和狗都会叫,叫这个行为就是一个特性,猫是喵,狗是汪,由实际对象决定。

多态的作用

1. 代码超级好扩展
以后新增「猪、鸡、鸭」类,不用改原有代码,只需要新建子类、重写方法即可,符合开闭原则。
2. 统一调用接口
外部只需要认识父类接口,不用管是猫是狗,代码简洁易懂。
3. 解耦代码
把「行为定义」和「行为实现」分开,代码维护成本极低。

耦合度:指的是代码内部关联程度的大小。如果耦合度高,改这处则容易影响别处,易出错。

多态的初步实现

一、三个必要前提

  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;}

三、 三个简单多态案例

  1. 动物园
  2. 班级
  3. 计算器