C++编译器如何知道具有超类的对象的大小
How does C++ compiler know the size of a object with superclasses
正如问题所述!
假设我有以下片段
class A
{
int x;
int y;
}
class B : public A
{
int z;
}
class C
{
A a;
public C(A a) : a(a){}
}
如果我用B类调用C的构造函数,它会复制类中的a部分数据吗?还是把它的B数据保存在某个地方?
提前感谢!这可能是一个愚蠢的问题,但实际上我从未理解。
如果将B
的实例传递给按值接受A
的C
构造函数,则B
实例将被切片,并且只保留A
部分。因此:
它会复制类中的A部分数据吗?
这个。
因此,特别是,无法将C::a
成员恢复为B
实例,其z
的值与原始B
实例的值相同——在(不可逆)切片操作期间,信息已丢失。
如果我用B类调用C的构造函数,它会复制类中的a部分数据吗?
是的。这被称为切片-参数是使用A
的复制构造函数创建的,该构造函数只复制A
子对象。
还是把它的B数据保存在某个地方?
没有。
相关文章:
- 给定一个指向对象的超类指针,如何获取对象的大小?
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 确保指向超类的指针指向c++中某个子类的对象
- 按值将对象传递给 SubClass 构造函数,导致超类的构造函数不调用
- 如何在接口类中创建一个超类对象
- cpp 从需要超类对象的函数访问子类对象方法
- 制作可以存储子类对象的超类类型的向量
- C++检查对象是否是给定超类的后代
- C++编译器如何知道具有超类的对象的大小
- 将子类对象传递给采用超类对象的函数
- 创建子类对象时, 是为超类创建的第二个对象
- 如何检索添加到由其超类对象组成的集合中的派生对象
- 访问超类类型成员对象的受保护成员 - 一个优雅的解决方案
- 当对象不是动态分配的(不是指针)时,是否可以从超类对象转换到子类
- 如何将对象'cast'为其超类继承的类?
- c++继承.对象调用超类方法而不是自己的方法
- 如何调用一个方法,该方法需要一个子类对象,该子类对象由指向其超类的指针引用
- 为什么我们需要一个超类的指针指向子类的对象?
- 在超类需要参数的地方构造不带参数的对象
- 通过值将子类对象传递给接受超类对象的函数是定义良好的行为吗