是否可以在C++中将类的实例作为结构的成员?

Is it possible in C++ to make an instance of a class as a member of structure?

本文关键字:实例 结构 成员 C++ 是否      更新时间:2023-10-16
struct Frame {
int frame_num;
BoundingBox bbox;
};

在上面的结构中,BoundingBox是一个类,稍后按以下方式使用。将类实例作为结构的成员有什么好处?

是否可以在C++中将类的实例作为结构的成员?

您已经在代码段中回答了自己的问题。是的,可能。

将类实例创建为结构的成员有什么好处?

int frame_numFrame有什么好处? 这与使用自定义类型的好处相同。

类是一种制作自定义类型(在你的例子中BoundingBox)的方法,除了语言开箱即用的内置类型(intfloat等)之外工作。 两者都可以放在另一个自定义类型(如Frame)中,它们提供了一种与数据交互的方式。例如int是一种允许程序员以指定方式处理整数数据的类型,即int指示其类型的值如何与float交互。同样,自定义类型将允许该类型的用户使用某些数据是某种时尚。

旁白:类和结构在C++中几乎相同。

这完全没问题。继续使用它。

FrameBoundingBox这两个抽象服务于自己的目的。无论一个是class,另一个是struct都不会改变这一点。

本质上,结构几乎与类相同。

但是,默认情况下,结构的成员声明为public,而类的成员声明为private成员。

为什么不呢?结构是一个类,所以它们没有什么特别之处。 它被称为"对象关联",它取决于设计。通常,对象关联称为"Has-A"关系。

在C++类和结构是一回事,默认访问修饰符对于私有的,对于结构是公共只有细微的区别

此外,如果不需要,则允许使用语法来嵌套这些构造,以便获得正确的 OOP 设计。

也就是说,我会注意到,在语义上,有一个区别:
因为结构主要用于描述数据
主要用于描述对象

一些程序员可能会(允许自己)在结构上使用memset,或将其复制到另一个内存位置。
这些操作可能会通过以下方式损坏像结构一样的类:-
损坏所包含的类成员的vptr
- 如果此结构本身具有虚拟方法,则它是自己的vptr
- 复制指针并创建一些令人惊讶的结果。

底线:在类中嵌套类
,在类中嵌套结构... 但是避免在结构中嵌套类,没有充分的理由这样做。

此外,您可能希望接受"struct -> DATA,类 -> 对象"的约定。