如下代码:
#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/