我尝试将包含另一个类的类作为成员变量。我遇到了以下问题:
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_) {}
谁能告诉我这两者有什么区别?
答案 0 :(得分:0)
这很可能表明SubClass不支持赋值运算符(在以前的代码中是必需的)。后一个代码不会调用赋值,而是复制从subClass _
初始化subClass成员一旦你加入了SubClass的定义
,就可以说更多了答案 1 :(得分:0)
您不能通过简单地使用'='来复制对象,除非此运算符被“重载”以某种方式克隆对象。在这里,subClass有一个构造函数,可以将输入对象复制到新对象中,这就是为什么你可以使用第二个代码。
答案 2 :(得分:0)
operator=
,将应用于该类的已创建实例
(创建类的第一个默认实例,然后调用operator =) <强>差异:强>
第二种情况被认为更有效,因为执行的操作更少
第一种情况 - 要求类具有默认构造函数。
你的问题可能是由于没有为MainClass实现默认构造函数,只要你已经实现了自己的构造函数版本 - 编译器不再创建特殊的成员函数(默认构造函数)
解决方案:实现默认构造函数/使用成员初始化语法(根据应用程序的逻辑选择变体)