【问题标题】:c++ calling non-default constructor as member [duplicate]c ++调用非默认构造函数作为成员[重复]
【发布时间】: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 中的成员?

【问题讨论】:

    标签: c++


    【解决方案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
    猜你喜欢
    • 2018-11-24
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 2018-10-28
    • 2016-07-28
    • 2018-05-13
    相关资源
    最近更新 更多