假设我有两个类,myclass1和myclass2。假设myclass2有一个字段myclass1 object1。所以myclass2标题看起来像这样:
class myclass2 {
public:
myclass2();
myclass2(int arg);
private:
myclass1 object1;
}
假设myclass1有这样的标题:
class myclass1 {
public:
myclass1();
myclass1(int arg);
private:
int var1;
}
现在假设在我的main函数中我想实例化一个myclass2类型的对象,如下所示:
int main(){
myclass2 object2(int VAR);
}
然后,为了使object2的私有字段object1在实例化object2时将私有字段var1设置为等于VAR,myclass2的构造函数是否应该像这样(?):
myclass2::myclass2(int arg){
object1 = object1(arg);
}
或者这可行(?):
myclass2::myclass2(int arg){
object1(arg);
}
或者在这种情况下我必须在myclass1中使用mutator函数来访问myclass2的构造函数中的object1' s私有字段var1?
最后,这会完成工作(?):
myclass2::myclass2(int arg){
myclass1 *type1pointer;
type1pointer = new myclass1(arg);
object1 = *type1pointer;
}
答案 0 :(得分:6)
class myclass2 {
public:
myclass2(int arg) : object1(arg) {}
private:
myclass1 object1;
};
因此,您只初始化对象一次。
这样,不调用object1默认构造函数,从而避免默认构造,然后是特定的myclass1
mutator