使用虚拟方法时成员重复

时间:2013-05-01 15:06:53

标签: c++ object virtual

当指向父对象为父类型的对象的指针时,我会在生成的对象中复制父成员。

儿童 - >家长 - >子

someMethod(Parent * obj);

Parent
virtual ~Parent() {}

Child : public Parent()

Child childobj = new Child();
someMethod(childobj);

在通过soemMethod传递后在内存中查看时,会显示如下所示的结果对象:

DATA[]
parentvar1
parentvar2
Child[]

->Child[]
->childvar1
->childvar2
->Parent[]

->->Parent[]
->->parentvar1
->->parentvar2

为什么我看到父数据在索引0和索引2处都重复?

1 个答案:

答案 0 :(得分:1)

我只是在猜测,因为你的术语很难理解。

我猜你正在查看调试器的数据,例如Visual Studio,而你的程序目前在Parent类的某些方法中。

在调试器中,您将看到this对象中的数据以及堆栈上的变量,您称之为“索引0”。其中一个变量是另一个Child对象。由于ChildParent的子类,因此您将看到Child的属性以及它继承的Parent属性(您称之为“索引”) 2" )。

在这种情况下,您没有看到任何复制,您只是在调试器中从不同的角度看到相同的数据(或者可能是两个不同的实例)。