标题:
C++各种构造函数的写法(2)
[打印本页]
作者:
yuyang911220
时间:
2017-4-21 20:58
标题:
C++各种构造函数的写法(2)
三、普通派生类构造函数的写法
定义派生类对象的时候,会按如下步骤执行构造操作:
1)传参 2)根据继承时的声明顺序构造基类 3)给类数据成员开辟空间 4)执行冒号语法后面的语句 5)执行构造函数函数体语句
1
class
Base
2
{
3
public
:
4
Base(
int
b) : m_b(b)
5
{
6
}
7
private
:
8
int
m_b;
9
};
10
11
class
Derived :
public
Base
12
{
13
public
:
14
//
普通派生类构造函数的写法
15
Derived(
int
b,
int
d) : Base(b), m_d(d)
16
{
17
}
18
private
:
19
int
m_d;
20
}; 再写一个多继承的示例:
1
class
Base1
2
{
3
public
:
4
Base1(
int
b1) : m_b1(b1)
5
{
6
}
7
private
:
8
int
m_b1;
9
};
10
11
class
Base2
12
{
13
public
:
14
Base2(
int
b2) : m_b2(b2)
15
{
16
}
17
private
:
18
int
m_b2;
19
};
20
21
class
Derived :
public
Base1,
public
Base2
22
{
23
public
:
24
Derived(
int
b1,
int
b2,
int
d) : Base1(b1), Base2(b2), m_d(d)
25
{
//
注意冒号语法后面的顺序无所谓,创造基类是按照上面的继承声明顺序来进行的...
26
}
27
private
:
28
int
m_d;
29
};
四、含有虚继承的派生类构造函数的写法
为何要用到虚继承?
虚继承主要是针对多继承时,出现二义性问题而提出的。比如,如下代码就需要用到虚继承,否则的话Derived类继承时,Base类就会不明确。
虚继承构造函数的执行按照如下步骤:
1)传参 2)创建基类,注意这时候需要显示创建所有“有参构造函数”的基类,包括直接基类,间接基类。 3)给类数据成员开辟空间 4)执行冒号语法 5)执行构造函数函数体
注:你可能会疑惑,如下代码不是将Base间接基类创建了3次吗?其实不是这样的,编译器是这样处理的,当最远的派生类Derived创建了基类Base之后,其直接基类创建Base类的语句将会被忽略掉。
1
class
Base
2
{
3
public
:
4
Base(
int
b) : m_b(b)
5
{
6
}
7
private
:
8
int
m_b;
9
};
10
11
class
Base1 :
virtual
public
Base
12
{
13
public
:
14
Base1(
int
b,
int
b1) : Base(b), m_b1(b1)
15
{
16
}
17
private
:
18
int
m_b1;
19
};
20
21
class
Base2 :
virtual
public
Base
22
{
23
public
:
24
Base2(
int
b,
int
b2) : Base(b), m_b2(b2)
25
{
26
}
27
private
:
28
int
m_b2;
29
};
30
//
虚继承,避免二义性
31
class
Derived :
public
Base1,
public
Base2
32
{
33
public
:
34
Derived(
int
b,
int
b1,
int
b2,
int
d) : Base(b), Base1(b, b1), Base2(b, b2), m_d(d)
35
{
//
注意冒号语法后面的顺序无所谓,创造基类是按照上面的继承声明顺序来进行的...
36
}
37
private
:
38
int
m_d;
39
}; }
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0