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

时间:2019-01-30 06:09:47

标签: c++

struct Frame {
  int frame_num;
  BoundingBox bbox;
};

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

5 个答案:

答案 0 :(得分:3)

  

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

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

  

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

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

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

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

答案 1 :(得分:1)

很好。继续使用它。

两个抽象-FrameBoundingBox-达到自己的目的。一个是class,另一个是struct并不会改变这一点。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

为什么不呢?结构是一类,因此它们没有什么特别的。 它称为“对象关联”,它取决于设计。通常,对象关联称为“ Has-A”关系。

答案 4 :(得分:0)

在C ++中,Class和Struct是相同的东西,对于 class ,默认访问修饰符为 private ,对于,则为 public strong>结构

此外,如果不需要语法说明,则可以嵌套这些结构,以便获得正确的OOP设计。

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

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

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

此外,您可能希望接受“结构->数据,类->对象”的约定