当前位置:
首页 >
类和对象—多态
发布时间:2025/4/5
35
豆豆
多态的基本语法
- 静态多态:函数重载和运算法重载属于静态多态 复用函数名
- 动态多态:派生类和虚函数实现运行时多态
静态多态和动态多态的区别
- 静态多态的函数地址早绑定,编译阶段确定函数地址
- 动态多态的函数地址晚绑定,运行阶段确定函数地址
早绑定代码如下:
#include <iostream> using namespace std;class Animal{public:void speak(){cout << "动物在说话"<< endl;} }; class Cat:public Animal{public:void speak(){cout << "猫在说话" <<endl; } };void doSpeak(Animal &animal){ //这个函数是早绑定,在编译阶段就已经绑定,所以无论传进来的参数是啥,最终的结果都是 动物在说话 animal.speak(); }void test01(){Cat c1;doSpeak(c1); } int main(){test01();return 0; } #include <iostream> using namespace std;class AbstractCalculator{ public:virtual int getResult(){return 0;}int m_Num1;int m_Num2; };class AddCalculator:public AbstractCalculator{ public:int getResult(){return m_Num1+m_Num2;} };class SubCalculator:public AbstractCalculator{ public:int getResult(){return m_Num1-m_Num2;} };class MulCalculator:public AbstractCalculator{ public:int getResult(){return m_Num1*m_Num2;} };void test01(){AbstractCalculator *p = new AddCalculator;p->m_Num1 = 100;p->m_Num2 = 100;cout << p->getResult() << endl;delete p;//减法运算p = new SubCalculator;p->m_Num1 = 100;p->m_Num2 = 100;cout << p->getResult() << endl;delete p;//乘法运算p = new MulCalculator;p->m_Num1 = 100;p->m_Num2 = 100;cout << p->getResult() << endl;delete p; } int main(){test01();return 0; }晚绑定代码:
class Animal{public:virtual void speak(){ //加上virtual 关键字 变为虚函数cout << "动物在说话"<< endl;} }; void doSpeak(Animal &animal){ //Animal &animal = c1animal.speak(); }总结:
动态多态的满足条件
动态多态的使用
父类的指针或者引用 指向子类的对象
动态多态的原理剖析
void test02(){cout << sizeof(Animal) << endl; }结果为4,说明是一个指针
计算器案例:
#include <iostream> using namespace std;class AbstractCalculator{ public:virtual int getResult(){return 0;}int m_Num1;int m_Num2; };class AddCalculator:public AbstractCalculator{ public:int getResult(){return m_Num1+m_Num2;} };class SubCalculator:public AbstractCalculator{ public:int getResult(){return m_Num1-m_Num2;} };class MulCalculator:public AbstractCalculator{ public:int getResult(){return m_Num1*m_Num2;} };void test01(){AbstractCalculator *p = new AddCalculator;p->m_Num1 = 100;p->m_Num2 = 100;cout << p->getResult() << endl;delete p;//减法运算p = new SubCalculator;p->m_Num1 = 100;p->m_Num2 = 100;cout << p->getResult() << endl;delete p;//乘法运算p = new MulCalculator;p->m_Num1 = 100;p->m_Num2 = 100;cout << p->getResult() << endl;delete p; } int main(){test01();return 0; } 《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
- 上一篇: 类和对象—继承—同名成员处理
- 下一篇: STL基本概念