s(const s& src)
{
cout<<"Copy\n";
p =src.p;
}
void disp(int x=0)
{
*p = x;
cout <<"Value at p :"<<*p <<endl<< p<<endl;
}
};// relevant piece of code
s s1;
s s2 = s1;
s1.disp(200);
s2.disp();
在这个程序中,我期待的是对象s1和s2的数据成员p 指向相同的内存位置对象s1的p值的任何变化都应该 在对象s2中反映p的值。在输出中,它清楚地表示由p保持的地址 对于s1和s2都是相同的但是我没有得到s2.disp的预期结果200 function.Output是
Copy
Value at p :200
0x1e069010
Value at p :0
0x1e069010
答案 0 :(得分:0)
您可以修改p
- disp
中的*p = x;
。致电s2.disp();
时,会使用默认0
。 (void disp(int x=0)
),因此您将*p
设置为0
。
答案 1 :(得分:0)
我的方法是正确的,只需将变量p设为public并在调用s1.disp();之后立即打印*(s2.p)。我可以看到p的值显示为200
答案 2 :(得分:0)
在您的代码中,您可以在方法p
中修改dist
:
* p = x;
在第二种情况下,当您拨打s2.disp()
时,会使用默认值0
,而*p
的值为0
。
要反映您的需求,您可以:
class s
{
public:
s(const s& src)
{
cout<<"Copy\n";
p = src.p;
}
void Display() const // Display method just display
{
cout << "Value at p :" << *p << endl << p << endl;
}
void UpdateP( int x = 0 )
{
*p = x;
}
};
s s1;
s s2 = s1;
s1.UpdateP(200);
s1.Display();
s2.Display();
只需live example,代码不是最漂亮的,但它会告诉您它正在运行。