C++ 使用虚拟方法时的成员复制
当将指向其父对象具有虚函数的对象的指针传递给具有父类型的方法时,会在结果对象中奇怪地复制父成员 子->父->子C++ 使用虚拟方法时的成员复制,c++,object,virtual,C++,Object,Virtual,当将指向其父对象具有虚函数的对象的指针传递给具有父类型的方法时,会在结果对象中奇怪地复制父成员 子->父->子 当通过soemMethod在内存中查看时,显示的结果对象如下所示: DATA[] parentvar1 parentvar2 Child[] ->Child[] ->childvar1 ->childvar2 ->Parent[] ->->Parent[] ->->parentvar1 ->->parentvar2
当通过soemMethod在内存中查看时,显示的结果对象如下所示:
DATA[]
parentvar1
parentvar2
Child[]
->Child[]
->childvar1
->childvar2
->Parent[]
->->Parent[]
->->parentvar1
->->parentvar2
为什么我看到父数据在索引0和索引2都被复制 我只是猜测一下,因为你的术语很难理解 我猜您正在通过调试器(如Visual Studio)查看数据,并且您的程序当前位于
父类的某个方法中
在调试器中,您将看到此
对象中的数据以及堆栈上的变量,您称之为“索引0”。其中一个变量是另一个子对象。由于Child
是Parent
的子类,您将看到该子类的属性以及它继承的Parent
属性(您称之为“索引2”)
在这种情况下,您没有看到任何复制,您只是在调试器中从不同的角度看到相同的数据(或者可能是两个不同的实例)。对不起,但是您的问题非常令人困惑,您能重新格式化并使其更精确吗?特别是最后一部分,这个列表没有意义…Child-childobj=new-Child()代码>我假设Child*childobj
?“在内存中查看时”如何?调试器?IDE?请提交一个完整但最少的示例来说明问题。这对我们来说是行不通的。你很快就会发现,如果你想要答案,你必须制定你的问题,使它们至少是可以理解的。
Parent
virtual ~Parent() {}
Child : public Parent()
Child childobj = new Child();
someMethod(childobj);
DATA[]
parentvar1
parentvar2
Child[]
->Child[]
->childvar1
->childvar2
->Parent[]
->->Parent[]
->->parentvar1
->->parentvar2