-1
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。输出是

Copy
Value at p :200
0x1e069010
Value at p :0
0x1e069010
4

3 回答 3

0

pdisp-中进行修改*p = x;。调用时s2.disp();使用默认值0。( void disp(int x=0)),因此您设置*p0

于 2013-08-21T12:51:56.853 回答
0

我的方法是正确的,只需将变量 p 设为公开并在调用 s1.disp(); 后立即打印 *(s2.p)。我可以看到 s2 的 p 值显示为 200

于 2013-08-21T13:08:28.153 回答
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();

只是一个活生生的例子,代码不是最漂亮的,但它告诉你它正在工作。

于 2013-08-21T13:15:00.160 回答