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 }

运行结果:

  

继承中 先构造父类,再构造子类;析构顺序相反(先析构子类,再析构父类)。

(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)

posted @ 2023-02-22 22:11  我会变强的  阅读(22)  评论(0编辑  收藏  举报