是否可以在C++中将类的实例作为结构的成员?
Is it possible in C++ to make an instance of a class as a member of structure?
struct Frame {
int frame_num;
BoundingBox bbox;
};
在上面的结构中,BoundingBox
是一个类,稍后按以下方式使用。将类实例作为结构的成员有什么好处?
是否可以在C++中将类的实例作为结构的成员?
您已经在代码段中回答了自己的问题。是的,可能。
将类实例创建为结构的成员有什么好处?
int frame_num
Frame
有什么好处? 这与使用自定义类型的好处相同。
类是一种制作自定义类型(在你的例子中BoundingBox
)的方法,除了语言开箱即用的内置类型(int
、float
等)之外工作。 两者都可以放在另一个自定义类型(如Frame
)中,它们提供了一种与数据交互的方式。例如int
是一种允许程序员以指定方式处理整数数据的类型,即int
指示其类型的值如何与float
交互。同样,自定义类型将允许该类型的用户使用某些数据是某种时尚。
旁白:类和结构在C++中几乎相同。
这完全没问题。继续使用它。
Frame
和BoundingBox
这两个抽象服务于自己的目的。无论一个是class
,另一个是struct
都不会改变这一点。
本质上,结构几乎与类相同。
但是,默认情况下,结构的成员声明为public
,而类的成员声明为private
成员。
为什么不呢?结构是一个类,所以它们没有什么特别之处。 它被称为"对象关联",它取决于设计。通常,对象关联称为"Has-A"关系。
在C++类和结构是一回事,默认访问修饰符对于类是私有的,对于结构是公共的,只有细微的区别
此外,如果不需要,则允许使用语法来嵌套这些构造,以便获得正确的 OOP 设计。
也就是说,我会注意到,在语义上,有一个区别:
因为结构主要用于描述数据,
而类主要用于描述对象。
一些程序员可能会(允许自己)在结构上使用memset
,或将其复制到另一个内存位置。
这些操作可能会通过以下方式损坏像结构一样的类:-
损坏所包含的类成员的vptr
- 如果此结构本身具有虚拟方法,则它是自己的vptr
。
- 复制指针并创建一些令人惊讶的结果。
底线:在类中嵌套类
,在类中嵌套结构... 但是避免在结构中嵌套类,没有充分的理由这样做。
此外,您可能希望接受"struct -> DATA,类 -> 对象"的约定。
- 如何从实现接口的模板化类实例访问结构
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- 如何在结构初始值设定项列表中实例化类
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 实例化时结构字段中的默认值
- 在C++中将类实例添加到对象层次结构中的问题
- C++:如何在结构中定义类实例.类具有参数化的构造函数
- 使用具有 string.reserve() 的字符串实例化结构
- 在 C++ 结构内声明的数组 A[1] 创建多个实例
- 在不使用默认构造函数的情况下声明 POD 结构时,会实例化什么?
- 为什么C++可以使用派生结构来实例化其父模板结构,而父模板可以调用子结构的函数?
- 使用 c 头文件时,是否需要将 "struct" 放在 c++ 中的结构实例前面?
- 'class MyClass' 在尝试定义静态结构实例时不会命名类型
- 在模板实例化期间获取原始结构/类名C++
- cpp 中是否存在一种数据结构,可以轻松地提供一种基于已存在的实例构建新结构的方法
- 在结构中使用位字段并使用C++从内存中读取实例
- 从知道其结构类型的实例中获取值
- 可以使用C 结构汇总初始化来创建临时实例
- 可以从其他类调用的c++多实例结构