我怎样才能看到地址和值c ++类之间的区别?

时间:2015-06-15 11:07:02

标签: c++

我在指针和参考理解方面存在问题。 我有以下代码段:

class U
{
protected:
    int m;
public:
    U(int m = 0) : m(m) {}
    virtual void f() { cout << "U::f() @ m = " << m << endl; }
};

class V : public U
{
    int n;
public:
    V(int m, int n) : U(m), n(n) {}
    void f() { cout << "V::f() @ m = " << m << ", n = " << n << endl; }
};

int main() {
    V v1(1, 1), v2(2, 2);
    v1.f();
    v2.f();
    U* u = &v1;
    *u = v2;
    v1.f();
    v2.f();
}

我运行它,输出是:

V::f() @ m = 1, n = 1
V::f() @ m = 2, n = 2
V::f() @ m = 2, n = 1
V::f() @ m = 2, n = 2

我不理解第三行输出:V::f() @ m = 2, n = 1。为什么m更改为2

2 个答案:

答案 0 :(得分:3)

*u=v2;

这不会使u指向v2。它会将v2分配给U指向的对象的u子对象,即U v1部分。这是因为*uU对象。

答案 1 :(得分:0)

首先 * u = v2; 不会让你指向v2。首先你被解除引用,它相当于 (U)v1 = v2;

因为类U只包含U :: int m所以只使用赋值操作修改了m。