包含另一个类作为成员变量的类的构造函数

时间:2013-02-25 02:26:01

标签: c++ oop class constructor

我尝试将包含另一个类的类作为成员变量。我遇到了以下问题:

class SubClass{
    ....
};

class MainClass{
   public:
    MainClass(SubClass const & subClass_);
   private:
    SubClass subClass
};

和构造函数的.cpp文件

MainClass::MainClass(SubClass const & subClass_){
   subClass =  subClass_;
}

这给出了编译器错误。但是以下工作:

MainClass::MainClass(SubClass const & subClass_):
   subClass(subClass_) {}

谁能告诉我这两者有什么区别?

3 个答案:

答案 0 :(得分:0)

这很可能表明SubClass不支持赋值运算符(在以前的代码中是必需的)。后一个代码不会调用赋值,而是复制从subClass _

初始化subClass成员

一旦你加入了SubClass的定义

,就可以说更多了

答案 1 :(得分:0)

您不能通过简单地使用'='来复制对象,除非此运算符被“重载”以某种方式克隆对象。在这里,subClass有一个构造函数,可以将输入对象复制到新对象中,这就是为什么你可以使用第二个代码。

答案 2 :(得分:0)

  • 在第一个案例中使用operator=,将应用于该类的已创建实例 (创建类的第一个默认实例,然后调用operator =)
  • 在第二种情况下使用成员初始化允许使用复制构造函数来创建类实例,因此最初使用所需的值初始化它。

<强>差异:
第二种情况被认为更有效,因为执行的操作更少 第一种情况 - 要求类具有默认构造函数。

你的问题可能是由于没有为MainClass实现默认构造函数,只要你已经实现了自己的构造函数版本 - 编译器不再创建特殊的成员函数(默认构造函数)

解决方案:实现默认构造函数/使用成员初始化语法(根据应用程序的逻辑选择变体)