Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.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++_Class_Inheritance_Derived Class_Base Class - Fatal编程技术网

C++ 继承中的基类是否复制到派生类?

C++ 继承中的基类是否复制到派生类?,c++,class,inheritance,derived-class,base-class,C++,Class,Inheritance,Derived Class,Base Class,正如标题所说:继承中的基类是否复制到派生类我的意思是像#include基类中的代码复制到派生类中,或者只创建基类中的一个对象,子类只在运行时使用它 继承中的基类是否复制到派生类? 不,它们不是复制的。它们本质上合并到派生类中 或者只创建基类中的一个对象,而子类只在运行时使用它 这个概念描述得最接近,但: 不,基类中没有单独创建的对象。派生类的对象被创建,并且完全包含它的基类特性。基本上这都是抽象的看待它的方式 我认为公平地说,编译器通过在计算中包含基类型的定义来计算派生类型的大小。因此,它为这两

正如标题所说:继承中的基类是否复制到派生类我的意思是像
#include
基类中的代码复制到派生类中,或者只创建基类中的一个对象,子类只在运行时使用它

继承中的基类是否复制到派生类? 不,它们不是复制的。它们本质上合并到派生类中

或者只创建基类中的一个对象,而子类只在运行时使用它

这个概念描述得最接近,但:


不,基类中没有单独创建的对象。派生类的对象被创建,并且完全包含它的基类特性。

基本上这都是抽象的看待它的方式

我认为公平地说,编译器通过在计算中包含基类型的定义来计算派生类型的
大小。因此,它为这两者分配了足够的内存

然后,它通过调用其构造函数在分配内存的第一部分构造基类,然后使用派生类的构造函数在分配内存的第二部分构造派生类

一天结束时,您将得到一块足够大的内存(一个对象),足以容纳基类成员对象和派生类成员对象。生成的每个成员函数都会相应地计算其成员变量地址偏移量(从分配内存的开始)

所以我不认为任何东西实际上是“复制”的,因为每个部分都被构造到分配的内存中


两个cookie切割器和一块特大的糕点。

类是编译器用来装载代码的编程语言定义。只有实例化的类对象在运行时占用内存空间

此时,将分配完整对象的类(派生类和基类),并将其与实例化对象关联

因此,考虑将基类复制到派生类是没有意义的,一旦为每个创建的对象分配了相应的完整类(派生+基类),当然,每个对象都有自己的实例,并且不与同一类的其他对象共享基类成员数据


如果要强制两个对象共享数据,必须将其某些成员定义为指向共享数据的指针。

区别是什么?如果它们是创建的,而派生类只是使用它,则更像是组合(特殊类型的组合),我不知道如何做。您是否混淆了语义和实现?类是一个对象工厂。不能复制类。程序可以复制对象。类
派生的
对象包含类
的实例作为子对象。我们使用“实例”而不是“复制”一词来避免与实际的复制操作混淆。只是澄清一下:您询问基类的声明和定义是否隐式复制到派生类的声明和定义中,并在编译期间成为派生类声明和定义的一部分,对吗,从另一个角度看,它们是复制品。它们被复制到
派生的
的每个实例,甚至是
基本的
的每个实例!我们几乎可以使用任何抽象场景来描述类是如何实现的,除此之外,它们都没有任何内在的价值,也没有任何一个对讨论有用。@PreferenceBean“然而,从另一个角度来看……”香格里拉?好的,从代码的角度来看,没有复制,只有共享。所以它们被放在内存中,每个部分(类的基础部分和派生部分)都被连接在一起,ABI和这有什么关系吗?