c++结构包含对象

标签 c++ oop struct

我想创建一个结构,比方说 Mystruct,它包含一个整数和一个 myObj 对象,其构造函数采用 2 个参数(一个字符串,另一个是 int)。我的意思是我想要:

struct Mystruct{
   myObj obj();
   int a;
};

现在,经过一些操作,我想创建一个 Mystruct 变量并初始化 obj 和 a。为此,我写道:

struct Mystruct* foo;
foo->a=5;
foo->obj=myObj("test",3);

这样做的好方法吗?

最佳答案

你的结构不包含一个对象,而是一个返回一个的函数:

struct Mystruct{
   myObj obj();  // this is a function declaration
   int a;
};

听起来像你的意思

struct Mystruct{
   myObj obj;
   int a;
};

然后你可以说

Mystruct foo; // default constructs obj: myObj must be default constructable
foo.a = 5;
foo.obj = myObj("test",3);

Mystruct foo = {myObj("test",3), 5};

请注意没有指针和动态分配:只有在确实需要并且知道自己在做什么的情况下才应使用它们。

为了完整起见,您对指针的尝试失败了,因为当您声明此指针时:

struct Mystruct* foo;

它没有指向任何有用的东西(实际上,它包含一个你可以认为是随机的内存地址,指向你不应该写的地方)。所以你不能这样做:

foo->a = 42; // Ooops, foo doesn't point to a MyStruct object yet.

在以这种方式使用它之前,您需要使 foo 指向一个 MyStruct 对象。

关于c++结构包含对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20798864/

相关文章:

c++ - 这是 C++11 正则表达式错误我还是编译器?

c++ - 与访问者的复合模式,访问者真正进入了什么以及如何?

javascript - 深嵌套函数javascript的替代品

C结构字段分配覆盖另一个字段

c - Microchip 改变了 C 语言的规则?

没有正确扫描所有内容的代码

c++ - 为什么这个 IF 语句不在循环内打印

c++ - 用于保存按下的键的动态缓冲区 - C++

C++ 总是使用显式构造函数

javascript - 在javascript中复制和扩展全局对象