什么是base class subobject?求member subobject等术语定义与示例
结论先行
你的理解存在两处错误,以下是明确的术语定义和示例说明:
术语标准定义
C++标准中,subobject(子对象)是指被包含在另一个对象中的对象,共分为三类:base class subobject(基类子对象)、member subobject(成员子对象)、数组成员子对象。
base class subobject(基类子对象)
派生类对象中,属于其继承的某一个基类类型的完整子对象,即为该派生类对象的基类子对象。
member subobject(成员子对象)
类/结构体对象中,对应类定义内声明的非静态数据成员的子对象,即为该类对象的成员子对象。
常见误区纠正
你之前的理解错误点如下:
- subobject是针对已经实例化的对象而言的概念,不存在“未实例化对象的subobject”,
int a只是类A的成员声明,不属于子对象范畴。 int a本身从来不是base class subobject:基类子对象是基类类型的完整对象,而非基类内部的成员。
示例说明
以你给出的代码为例,结合实例化场景说明:
struct A{int a;}; struct B{int b;}; struct C:public A,public B{}; int main() { // 实例化C类型的完整对象c C c; // 1. 基类子对象示例 // c包含两个基类子对象:A类型子对象、B类型子对象 A& a_base_sub = c; // 引用c的A类型基类子对象 B& b_base_sub = c; // 引用c的B类型基类子对象 // 2. 成员子对象示例 // a是类A的非静态数据成员,所以a_base_sub.a就是a_base_sub的int类型成员子对象 // 同时该子对象也属于完整对象c的成员子对象 int& a_member = c.a; // 同理,b是类B的非静态数据成员,b_base_sub.b是其成员子对象 int& b_member = c.b; // 3. 数组成员子对象示例 int arr[5] = {1,2,3,4,5}; int& arr_element = arr[2]; // arr[2]就是数组对象arr的数组成员子对象 }
内容的提问来源于stack exchange,提问作者user15071942
相关产品推荐
相关产品推荐

