我如何查看地址和值 c++ 类之间的区别

How can i see the difference between address and value c++ class?

本文关键字:之间 区别 c++ 何查看 地址      更新时间:2023-10-16

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

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

*u=v2;

这并不能u指向v2.它将v2分配给u指向的对象U子对象,即v1U部分。这是因为*u是一个U对象。

首先*u = v2;没有让你指向 v2 .首先 u 被取消引用,它等效于(U)v1 = v2;

由于类 U 仅包含 U::int m,因此使用赋值操作仅修改 m。