C++Note 多态的基本概念 继承 + virtual
多态是C++面向对象三大特性之一
多态分为两类:
静态多态:函数重载 和 运算符重载 属于静态多态 复用函数名
动态多态:派生类 和 虚函数 属于 运行时多态
静态多态和动态多态区别:
静态多态的函数地址早绑定 - 编译阶段确定函数地址
动态多态的函数地址晚绑定 - 运行阶段确定函数地址
1 class Animal//动物类 2 { 3 public: 4 void speak() 5 { 6 cout << "动物在说话" << endl; 7 } 8 }; 9 //猫类 10 class Cat :public Animal 11 { 12 public: 13 void speak() 14 { 15 cout << "猫叫" << endl; 16 } 17 }; 18 //地址早绑定 在编译阶段确定函数地址 19 void doSpeak(Animal &animal)// Animal &animal = cat; 20 { 21 animal.speak();//调用Animal的 speak函数 22 } 23 void test() 24 { 25 Cat cat; 26 doSpeak(cat);//输出:动物在说话 27 }
virtual void speak()
1 class Animal//动物类 2 { 3 public: 4 virtual void speak()//地址晚绑定 虚函数:子类函数重名的时调用子类 5 { 6 cout << "动物在说话" << endl; 7 } 8 }; 9 //猫类 10 class Cat :public Animal 11 { 12 public: 13 void speak() 14 { 15 cout << "猫叫" << endl; 16 } 17 }; 18 //如果要让猫说话,那么这个函数地址就不能提前绑定 需要在运行阶段进行绑定 地址晚绑定 19 void doSpeak(Animal &animal) 20 { 21 animal.speak(); 22 } 23 void test() 24 { 25 Cat cat; 26 doSpeak(cat);//输出:猫叫 27 }
动态多态满足条件:
1、有继承关系
2、子类要重写父类的虚函数 (子类和父类函数重名 返回值相同 形参相同 父类函数加关键字 virtual 子类的virtual关键字可加可不加)
动态多态的使用:父类的指针或者引用 指向子类对象 (Animal &animal )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)