开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情
1、什么是多态?
浅显的理解就是多种状态。拿世界杯举例,昨晚阿根廷二比零战胜墨西哥有望出线!这个事件已经发生,不同的人会产生不同的状态!阿根廷的粉丝会欢呼雀跃,墨西哥的粉丝会垂头丧气!这就是多态。指的是同一个消息,不同类型的对象,会产生不同的状态!反映C++语言中,即不同的对象在调用同名的函数时产生不同的函数实现。
比赛结束后,双方球迷都调用了WatchGame()函数,但结果是一方高兴一方失落!
2、多态的基本语法!
静态多态:函数重载和运算符重载 动态多态:派生类和虚函数实现运行时多态 静态多态与多态多态的区别: 静态多态的函数地址早绑定 - 编译阶段确定函数地址 动态多态的函数地址晚绑定 - 运行阶段确定地址
#include <iostream>
using namespace std;
class Animal
{
public:
int age;
virtual void speak()
{
cout << "动物叫声! " << endl;
}
};
class Cat :public Animal
{
public:
void speak()//虚函数
{
cout << "小猫喵喵叫!" << endl;
}
};
class Dog :public Animal
{
public:
void speak()
{
cout << "小狗汪汪叫!" << endl;
}
};
void doSpeak(Animal &animal)//父类的引用
{
animal.speak();
}
void test01()
{
Cat c1;
Dog d1;
doSpeak(d1);
doSpeak(c1);
//c1.speak();
}
int main()
{
test01();
return 0;
}
总结多态的基本语法:
1、存在有继承关系
2、子类重写父类的虚函数(不是重载,函数的返回值与参数列表完全相同才叫重写)
3、案例介绍
利用多态实现计算机,实现计算机抽象类。
//利用多态实现计算机
//实现计算机抽象类
#include <iostream>
using namespace std;
class AbstractCalculator
{
public:
virtual int getResult()
{
return 0;
}
int num1;
int num2;
};
class add :public AbstractCalculator
{
public:
int getResult()
{
return num1 + num2;
}
};
class reduse :public AbstractCalculator
{
public:
int getResult()
{
return num1 - num2;
}
};
class cheng :public AbstractCalculator
{
public:
int getResult()
{
return num1 * num2;
}
};
void test01()
{
AbstractCalculator *a = new add;
a->num1 = 10;
a->num2 = 10;
cout << a->getResult() << endl;
delete a;
AbstractCalculator *b = new reduse;
b->num1 = 10;
b->num2 = 10;
cout << b->getResult() << endl;
delete b;
AbstractCalculator *c = new cheng;
c->num1 = 10;
c->num2 = 10;
cout << c->getResult() << endl;
delete c;
}
int main()
{
test01();
}
很简单,三个运算方法的类继承了计算器类,并通过重写基类中的虚函数来实现多态!!!