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 2023-07-25 17:28  廿陆  阅读(14)  评论(0)    收藏  举报

导航