4.1 通⽤接⼝
1. 通⽤接⼝
需求: 在王者荣耀游戏中设计⼀个选择英雄玩游戏的函数接⼝?

void playGameByAngela(Angela &angela);
void playGameByXiangYu(XiangYu &xiangyu);
void playGameByLuban(Luban &lanban);
void playGame(AngelaHero &angela);
void playGame(XiangYu &xiangyu);
void playGame(Luban &lanban);
void playGame(AngelaHero &angela);
void playGame(XiangYu &xiangyu);
void playGame(Luban &lanban);
void playGame(MonkSha &monkSha);
在 C++ 中可以使⽤⽗类的引⽤来引⽤⼦类的对象,也可以使⽤⽗类的指针来指向⼦类的对象
,反过来则不⾏。“
只能爹管⼉⼦,不能⼉⼦管爹”
。
- void playGame(Hero &hero);
⽗类的函数接⼝是⽤ virtual 关键字修饰变成虚函数
class Hero{
public:
virtual void skill(void);
};
⼦类继承⽗类,对⽗类的函数接⼝进⾏重写
class Angela:public Hero
{
public:
virtual void skill(void);
};
class XiangYu:public Hero{
public:
virtual void skill(void);
};
class Luban:public Hero{
public:
virtual void skill(void);
};
⽗类的引⽤来引⽤⼦类的对象或⽗类的指针来指向⼦类的对象
void playGame(Hero &hero)
{
hero.skill();
}
4.2 多态 (polymorphic) 介绍
一、概念
不同的对象接收到同⼀消息的时候,产⽣不同的效果
二、理解
在⾯向对象中,
多态是 **** 指通过基类 (⽗类) 的指针或者引⽤指向⼦类的对象
,
在运⾏时动态调⽤实际绑定对象函数的⾏为。即
“
⼀个接⼝,多种实现
”
三、分类

- 静态多态是编译器在编译期间完成的,编译器会根据实参类型来选择调⽤合适的函数,如果有合适的函数就调⽤,没有的话就会发出警告或者报错;
- 动态多态是 ** 在程序运⾏时 **** 根据基类的引⽤(指针)** 指向的对象来确定⾃⼰具体该调⽤哪⼀个类的虚函数。
四、作用
把不同的⼦类对象都当作⽗类来看,可以屏蔽不同⼦类对象之间的差异,写出通⽤的代码
,做出通⽤的编程,以适应需求的不断变化。
多态是设计模式的基础,多态是框架的基础。
五、前提条件
- 要有继承
- 要有虚函数重写(被 virtual 声明的函数叫虚函数)