CPP学习之——继承的构造与析构(12.12)

一 概念

本节课介绍继承类中构造与析构函数的执行情况

二 示例演示及输出一

2.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
using namespace std;
class father
{
private:
int a;
public:
father(int i){a=i;cout<<"构造基类a的值:"<<a<<endl;}
~father(){cout<<"析构基类a的值:"<<a<<endl;}
};
class son:public father
{
private:
int b;
father age;
public:
son(int i,int j);
~son(){cout<<"析构子类b的值:"<<b<<endl;}
};
son::son(int i,int j):father(i),age(j){
b=j;
cout<<"构造子类b的值:"<<b<<endl;
}
int main()
{
son a(1,2);
return 0;
}

2.2 输出结果

1
2
3
4
5
6
构造基类a的值:1
构造基类a的值:2
构造子类b的值:2
析构子类b的值:2
析构基类a的值:2
析构基类a的值:1

2.3 代码说明

  • 先构造基类的值,后构造子类的值,析构的顺序与构造相反

三 示例演示及输出二

3.1 代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<iostream>
using namespace std;
class A
{
public:
A(){cout<<"构造A"<<endl;}
~A(){cout<<"析构A"<<endl;}
};
class B
{
public:
B(){cout<<"构造B"<<endl;}
~B(){cout<<"析构B"<<endl;}
};
class C
{
public:
C(){cout<<"构造C"<<endl;}
~C(){cout<<"析构C"<<endl;}
};
class D
{
public:
D(){cout<<"构造D"<<endl;}
~D(){cout<<"析构D"<<endl;}
};
class E:public A,public B,public C,public D{};
int main()
{
E e;
return 0;
}

3.2 输出结果

1
2
3
4
5
6
构造基类a的值:1
构造基类a的值:2
构造子类b的值:2
析构子类b的值:2
析构基类a的值:2
析构基类a的值:1