C++黑马程序员——P127-130. 继承 语法,方式,对象模型,构造和析构顺序
- P127. 类和对象——继承——基本语法
- P128. 类和对象——继承——继承方式
- P129. 类和对象——继承——继承中的对象模型
- P130. 类和对象——继承——构造和析构顺序
- P127. 继承-基本语法
继承是面向对象三大特性之一。(另外两个:封装,多态)
继承的好处:减少重复代码
语法:class 子类 : 继承方式 父类
子类 也称为 派生类,父类 也称为 基类
派生类中的成员,包含两大部分:
一类是从基类继承过来的,一类是自己增加的成员。
从基类继承过来的表现其共性,而新增的成员体现了其个性。
1 //继承实现页面
2 //公共页面类
3 class BasePage
4 {
5 public:
6 void header()
7 {
8 cout << "公共头部" << endl;
9 }
10 void bottom()
11 {
12 cout << "公共底部" << endl;
13 }
14 void list()
15 {
16 cout << "公共列表" << endl;
17 }
18 };
19
20 //Java页面
21 class Java :public BasePage
22 {
23 public:
24 void content()
25 {
26 cout << "Java内容" << endl;
27 }
28 };
29
30 //Python页面
31 class Python :public BasePage
32 {
33 public:
34 void content()
35 {
36 cout << "Python内容" << endl;
37 }
38 };
39
40 void test01()
41 {
42 Java j1;
43 j1.header();
44 j1.bottom();
45 j1.list();
46 j1.content();
47 Python p1;
48 p1.header();
49 p1.bottom();
50 p1.list();
51 p1.content();
52 }
53
54 int main()
55 {
56 test01();
57 return 0;
58 }
运行结果:
- P128. 继承方式
继承方式一共有三种:
● 公共继承
● 保护继承
● 私有继承
访问权限 的区别:P101
虽然 子类 访问不了 父类 的私有成员,但是子类的内存大小却有这一部分(私有成员的部分)
1 class Base
2 {
3 public:
4 int m_A;
5 protected:
6 int m_B;
7 private:
8 int m_C; //私有成员只是被隐藏了,但是还是会继承下去
9 };
10
11 class Son :public Base
12 {
13 };
14
15 void test01()
16 {
17 Son s1;
18 cout << "sizeof(Son) = " << sizeof(s1) << endl;
19 }
20
21 int main()
22 {
23 test01();
24 return 0;
25 }
运行结果:
- P129. 继承中的对象模型
● 父类中所有 非静态成员属性 都被会子类继承下去
● 父类中私有成员属性 是被编译器给隐藏了,因此是访问不到,但是确实被继承下去了
- P130. 构造和析构顺序
子类继承父类后,当创建子类对象,也会调用父类的构造函数
1 //继承中的构造和析构顺序
2 class Base
3 {
4 public:
5 Base()
6 {
7 cout << "Base 的构造函数调用" << endl;
8 }
9 ~Base()
10 {
11 cout << "Base 的析构函数调用" << endl;
12 }
13 };
14
15 class Son :public Base
16 {
17 public:
18 Son()
19 {
20 cout << "Son 的构造函数调用" << endl;
21 }
22 ~Son()
23 {
24 cout << "Son 的析构函数调用" << endl;
25 }
26 };
27
28 void test01()
29 {
30 Son s1;
31 }
32
33 int main()
34 {
35 test01();
36 return 0;
37 }
运行结果:
继承中 先构造父类,再构造子类;析构顺序相反(先析构子类,再析构父类)。
(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)