我已经理解了复制构造函数的概念,我们使指针具有不同的位置并指向相同的值。
但我想知道为什么当我尝试访问对象变量的值时,其值与另一个值的值不同。
例如:
#include <iostream.h>
using namespace std;
class myclass {
public:
int a, b;
string c;
};
int main()
{
myclass foo, bar;
foo = bar;
bar.a = 20;
cout << foo.a << endl; // why it is not printing 20 here, as implicit copy
// constructor copy all members from object bar
// to object foo?
}
答案 0 :(得分:0)
为什么这里不打印20作为隐式复制constructpr将所有成员从对象栏复制到对象foo?/
当你执行赋值时,那些成员也会重载(或内置)复制构造函数和赋值运算符:
foo=bar;
然后bar
中的所有成员都被复制分配到foo
中的相应字段,而int
和std::string
都与它们初始化的实例没有任何关系。另请注意,这里您没有调用任何copy-constuctor,而是重载赋值运算符(operator=
)。
答案 1 :(得分:0)
复制构造函数未将a
的引用或指针传递给新对象,它正在复制此原始整数的值。为了达到您想要的结果(在您的示例中,我假设是在复制对象后指定a
的值),您应该重新构建您的班级,让a
成为指针为整数。请考虑以下示例:
class myclass
{
int *a, *b;
string c;
myclass()
{
a = new int;
b = new int;
}
};
int main()
{
myclass foo, bar;
foo = bar;
*bar.a = 20;
cout << foo.a << endl;
}
这将导致包含&#34; 20&#34;的地址在复制过程中通过。现在正确设置a
时,它将反映在两个对象中
这个答案附带免责声明,我不认为这是最佳做法,最后我鼓励您重新考虑您的设计。