Почему значение той же переменной в куче объекта 1 не отражено в object2?

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

-1

Решение

Вы модифицируете p в disp*p = x;, Когда вы звоните s2.disp(); по умолчанию 0 используется. (void disp(int x=0)), так что вы установите *p в 0,

0

Другие решения

Мой подход был верным, просто сделайте переменную p общедоступной и напечатайте * (s2.p) сразу после вызова s1.disp (); я могу видеть значение p для s2, отображаемое как 200

0

В своем коде вы модифицируете 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();

Просто живой пример, код не самый красивый, но он показывает вам, что он работает.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector