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 ++调用非默认构造函数作为成员[重复]的主要内容,如果未能解决你的问题,请参考以下文章

c+学习记录

C++02_类与对象(中)

使用虚拟继承时调用默认构造函数[重复]

是否立即为作为类成员的对象数组调用构造函数?

C++类和对象(this指针6个默认成员函数const成员)

第 13 章