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 codes s1;
s s2 = s1;
s1.disp(200);
s2.disp();
В этой программе я ожидал, что с данных члена p объектов s1 и s2
указать на ту же ячейку памяти любое изменение в значении p объекта s1 должно
отразить значение p в объекте s2.В выводе ясно, что адрес, содержащийся в p
одинаково для s1 и s2.но я не получил ожидаемый результат 200 для s2.disp
функция. Выход
Copy
Value at p :200
0x1e069010
Value at p :0
0x1e069010
Вы модифицируете p
в disp
— *p = x;
, Когда вы звоните s2.disp();
по умолчанию 0
используется. (void disp(int x=0)
), так что вы установите *p
в 0
,
Мой подход был верным, просто сделайте переменную p общедоступной и напечатайте * (s2.p) сразу после вызова s1.disp (); я могу видеть значение p для s2, отображаемое как 200
В своем коде вы модифицируете p
в методе dist
:
* р = х;
Во втором случае, когда вы звоните 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();
Просто живой пример, код не самый красивый, но он показывает вам, что он работает.