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   )

posted on   廿陆  阅读(3)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示