Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用虚拟方法时的成员复制_C++_Object_Virtual - Fatal编程技术网

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