您的位置:首页 > 编程语言 > C语言/C++

【c++】继承机制中的构造器和析构器

2017-08-19 14:11 169 查看
出处  http://blog.csdn.net/w_linux

目录(?)[-]
一继承机制中构造与析构应用代码
效果
解析

二继承机制中构造器和析构器的调用时间
效果


一、继承机制中构造与析构应用代码

#include <iostream>
#include <string>
using namespace std;

class Animal{//这里不给name私有原因是,主函数中子类访问了name,因为子类不能访问基类的私有成员,所以这里不给name私有
//  private:
//  string name;
public:
Animal(string theName);//基类构造器
void eat();
void sleep();
string name;
};

class Pig:public Animal
{
public:
void climb();
Pig(string thename);//子类构造器
};

Animal::Animal(string theName)
{
name=theName;
}

void Animal::eat()
{
cout<<"我正在吃\n\n"<<endl;
}

void Animal::sleep()
{
cout<<"我正在睡\n\n"<<endl;
}

Pig::Pig(string thename):Animal(thename)//初始化列表
{

}

void Pig::climb()
{
cout<<"我正在爬\n\n"<<endl;
}

int main()
{
Pig pig("阿水的阿里");//将字符串阿水的阿里直接给了name属性(基类,子类可共用)

cout<<"这只pig的名字:"<<pig.name<<endl;

pig.climb();
pig.eat();
pig.sleep();
return 0;
}
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<
4000
li style="padding:0px 5px;">51
52
53
54
55
56
57
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57


1、效果




2、解析

理解以下几步

1.pig的名字在pig的构造器中并没有初始化,为什么在主函数中给pig对象赋值了阿水的阿里,可以形成? 

2.子类是否可以访问基类的私有成员? 

3.pig的构造器如何定义?

理解以下图 







pig在定义构造器是,利用初始化列表将Animal的名字继承给了pig类,简单的说子类继承了基类
子类不能访问基类的私有成员变量


二、继承机制中构造器和析构器的调用时间

#include <iostream>
#include <string>
using namespace std;

class Animal{
public:
Animal();
~Animal();
void dosomething();
};

class Pig:public Animal
{
public:
Pig();
~Pig();
};

Animal::Animal()
{
cout<<"基类构造器正在被调用\n\n"<<endl;
}

Animal::~Animal()
{
cout<<"基类析构器正在被调用\n\n"<<endl;
}

void Animal::dosomething()
{
cout<<"基类的方法正在被调用\n\n"<<endl;
}

Pig::Pig()
{
cout<<"子类构造器正在被调用\n\n"<<endl;
}

Pig::~Pig()
{
cout<<"子类析构器正在被调用\n\n"<<endl;
}

int main()
{
Pig pig;
pig.dosomething();

cout<<"end!\n"<<endl;
return 0;
}
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51


1.效果



从以上结果可以看出,基类与子类中构造器和析构器的调用时间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 继承