Sam*_*Sam 1 c++ constructor new-operator
假设我有两个类,myclass1和myclass2.假设myclass2有一个字段myclass1 object1.所以myclass2标题看起来像这样:
class myclass2 {
public:
myclass2();
myclass2(int arg);
private:
myclass1 object1;
}
Run Code Online (Sandbox Code Playgroud)
并假设myclass1有一个像这样的标题:
class myclass1 {
public:
myclass1();
myclass1(int arg);
private:
int var1;
}
Run Code Online (Sandbox Code Playgroud)
现在假设在我的main函数中我想实例化一个myclass2类型的对象,如下所示:
int main(){
myclass2 object2(int VAR);
}
Run Code Online (Sandbox Code Playgroud)
然后,为了使object2的私有字段object1在object2实例化时将私有字段var1设置为等于VAR,myclass2的构造函数是否应该像这样(?):
myclass2::myclass2(int arg){
object1 = object1(arg);
Run Code Online (Sandbox Code Playgroud)
}
或者这会工作(?):
myclass2::myclass2(int arg){
object1(arg);
Run Code Online (Sandbox Code Playgroud)
}
或者在这种情况下,我必须在myclass1中使用mutator函数来访问myclass2的构造函数中的object1的私有字段var1吗?
最后,这会完成工作(?):
myclass2::myclass2(int arg){
myclass1 *type1pointer;
type1pointer = new myclass1(arg);
object1 = *type1pointer;
Run Code Online (Sandbox Code Playgroud)
}
使用初始化列表:
class myclass2 {
public:
myclass2(int arg) : object1(arg) {}
private:
myclass1 object1;
};
Run Code Online (Sandbox Code Playgroud)
因此,您只初始化对象一次.这样,不调用object1默认构造函数,从而避免默认构造,然后是特定的myclass1mutator
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |