有一个问题让我很困惑
我创建了一个新的变量
Foo *a=new Foo();
然后我声明了一个实例变量
Foo b;
现在我想将新变量转换为实例变量,所以我做了
b.setValue0(a->getValue0());
b.setValue1(a->getValue1());
b.setValue2(a->getValue2());
有没有更简单快捷的方法?
您可以使用复制构造函数:
Foo b(*a);
当然假设复制对象是允许的。
"有更简单、更快的方法吗?"
您可以为Foo
声明一个赋值运算符
Foo& operator=(const Foo&);
这样你就可以写了
b = *a;
另一种选择是提供一个复制构造函数
Foo(const Foo&);
这允许直接初始化b
Foo b(*a);
您应该注意,编译器将自动为您生成这些操作,除非您将其中任何一个声明为自己的操作,或者使用参数声明特殊构造函数。
您可以使用带有const参数引用的复制构造函数。保证复制构造函数不会更改它是常量。
class Foo{
public:
. . .
// copy constructor
Foo(const Foo &b)
{
value0 = b.value0;
value1 = b.value1;
}
}
//=== file main_program.cpp ====================================
. . .
Foo fooObj; // calls default constructor
Foo anotherFooObj = fooObj; // calls copy constructor.