多态_virtual
/* 父类指针定义对象,当基类与派生类存在相同成员函数,编译器设置为基类中的版本,
为静态多态/静态链接/早绑定:函数调用在程序执行前就准备好了!
在父类相同函数前加 virtual 则编译器看指针的内容,而不是类型!
子类定义对象,当基类与派生类存在相同成员函数,调用子类!
父类定义对象,当基类与派生类存在相同成员函数,调用父类!
*/
1 /* 父类指针定义对象,当基类与派生类存在相同成员函数,编译器设置为基类中的版本,
2 为静态多态/静态链接/早绑定:函数调用在程序执行前就准备好了!
3 在父类相同函数前加 virtual 则编译器看指针的内容,而不是类型!
4
5 子类定义对象,当基类与派生类存在相同成员函数,调用子类! 父类定义对象,当基类与派生类存在相同成员函数,调用父类!
6 */
7
8 #include <iostream>
9
10 using namespace std;
11
12 class parent {
13 public:
14 parent(int age) {
15 this->age = age;
16 }
17
18 void pri(void) {
19 cout << "parent = " << age << endl;
20 }
21
22 private:
23 int age;
24 };
25
26 class child : public parent{
27 public:
28 child(int num):parent(6){
29 this->num = num;
30 }
31
32 void pri(void) {
33 cout << "child = " << num << endl;
34 }
35
36 private:
37 int num;
38 };
39
40 int main(void)
41 {
42
43 //方式一:
44
45 cout << "—— 方式一 ——" << endl;
46
47 parent paren(10);
48 paren.pri(); // 此时调用parent类中的pri(看this指针)
49
50 child chi(11);
51 chi.pri(); // 子类定义对象,当基类与派生类存在相同成员函数,调用子类!(看this指针)
52 //chi.parent::pri(); // 调用父类中pri
53
54
55 //方式二:
56
57 cout << "—— 方式二 ——" << endl;
58
59 child *c = χ
60 c->pri(); // 子类成员函数(看this指针)
61
62
63 //方式三:
64
65 cout << "—— 方式三 ——" << endl;
66
67 parent& b1 = paren;
68 parent& b2 = chi;
69
70 b1.pri(); // 父类成员函数
71 b2.pri(); //(加virtual看指针,不加则编译器设置为父类中的版本)
72
73 system("pause");
74
75 return 0;
76 }
笔记