C++ //多态 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名 //动态多态:派生类和虚函数实现运行时多态

 1 //多态
 2 //静态多态:函数重载 和 运算符重载 属于静态多态 ,复用函数名
 3 //动态多态:派生类和虚函数实现运行时多态
 4 
 5 //静态多态和动态多态的区别
 6 //静态多态的函数地址早绑定 - 编译阶段确定函数地址
 7 //动态多态的函数地址晚绑定 - 运行阶段确定函数地址
 8 
 9 //动态多态
10 //1.有继承关系
11 //2.子类要重写父类的虚函数
12 
13 //动态多态使用
14 //父类的指针或这引用  指向子类的对象
15 
16 #include <iostream>
17 #include <string>
18 using namespace std;
19 
20 //多态
21 
22 //动物类
23 class Animal
24 {
25 public :
26     virtual void speak()   //虚函数
27     {
28         cout << "动物在说话" << endl;
29     }
30 
31 };
32 //猫类
33 class Cat : public Animal
34 {
35 public:
36     //重写 函数返回值类型 函数名 参数列表 完全相同
37     void speak()
38     {
39         cout << "小猫在说话!" << endl;
40     }
41 };
42 
43 //狗类
44 class Dog : public Animal
45 {
46 public:
47     void speak()
48     {
49         cout << "小狗在说话!" << endl;
50     }
51 };
52 
53 //执行说的函数
54 //地址早绑定  在编译阶段确定了函数地址
55 //如果执行让猫说话,那么这个函数地址不能提前绑定,需要在运行阶段进行绑定,地址晚绑定
56 
57 void doSpeak(Animal& animal)  //Animal &animal = cat;
58 {
59     animal.speak();
60 }
61 
62 void test01()
63 {
64     Cat cat;
65     doSpeak(cat);
66 
67     Dog dog;
68     doSpeak(dog);
69 }
70 
71 int main()
72 {
73 
74     test01();
75 
76 
77     system("pause");
78 
79     return 0;
80 
81 }

 

posted on 2021-08-08 16:21  Bytezero!  阅读(191)  评论(0编辑  收藏  举报