c ++调用非默认构造函数作为成员[重复]
Posted
技术标签:
【中文标题】c ++调用非默认构造函数作为成员[重复]【英文标题】:c++ calling non-default constructor as member [duplicate] 【发布时间】:2010-09-04 18:49:56 【问题描述】:假设我有一个类 A 和一个类 B。B 用作 A 中的成员。B 没有默认构造函数,但需要一个参数。
class B
B(int i)
;
class A
B m_B;
A()
m_B(17); //this gives an error
;
我怎样才能仍然使用 B 作为 A 中的成员?
【问题讨论】:
【参考方案1】:使用初始化列表。
class B
public:
B(int i)
;
class A
B m_B;
public:
A() : m_B(17)
;
顺便说一句,要在构造函数之外的某处重置m_B
,正确的语法是:
m_B = B(17);
【讨论】:
在这个例子中,如果最后一行m_B = B(17)
是从A()
构造函数中调用的,那么B
的默认构造函数是否仍会被调用?如果是这样,有没有办法防止这种情况发生?
@Steven:(1)是的。 (2)使用初始化列表初始化m_B
。以上是关于c ++调用非默认构造函数作为成员[重复]的主要内容,如果未能解决你的问题,请参考以下文章