如下代码:

#include <stdio.h>
class Parent
{
public:
    virtual void func() {printf("Parent\n");}
};

class Child1 : public Parent
{
    virtual void func() {printf("Child1\n");}
};

class Child2 : public Parent
{
    virtual void func() {printf("Child2\n");}
};

int main(int argc, char* argv[])
{
    Parent & obj = Child1();
    obj.func();
    obj = Child2();
    obj.func();
    return 0;
}

产生以下结果:
expected: Child1 Child2.

actual: Child1 Child1.

(在VS2010上编译)

我想vptr不会因分配而改变。有没有办法使它重新创建(除了使用指向Parent的指针并使用new分配给它之外)?

谢谢

最佳答案

您正在obj上调用默认赋值运算符,该运算符仍为Child1类型,且参数为Child2类型。对象本身仍然是Child1类型。您可以通过在所有3个类上实现operator =并在其中插入打印语句来验证这一点。

关于c++ - 引用变量和继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8225231/

10-09 19:33