包含对象的c ++结构

cae*_*sar 1 c++ oop struct

我想创建一个结构,让我们说Mystruct,它包含一个整数和一个myObj对象,其构造函数有两个参数(一个是字符串,另一个是int).我的意思是我想:

struct Mystruct{
   myObj obj();
   int a;
};
Run Code Online (Sandbox Code Playgroud)

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

struct Mystruct* foo;
foo->a=5;
foo->obj=myObj("test",3);
Run Code Online (Sandbox Code Playgroud)

这是一个好方法吗?

jua*_*nza 8

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

struct Mystruct{
   myObj obj();  // this is a function declaration
   int a;
};
Run Code Online (Sandbox Code Playgroud)

听起来像你的意思

struct Mystruct{
   myObj obj;
   int a;
};
Run Code Online (Sandbox Code Playgroud)

然后你可以说

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

要么

Mystruct foo = {myObj("test",3), 5};
Run Code Online (Sandbox Code Playgroud)

注意缺少指针和动态分配:如果你真的需要,你应该只使用那些,如果你知道你在做什么.

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

struct Mystruct* foo;
Run Code Online (Sandbox Code Playgroud)

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

foo->a = 42; // Ooops, foo doesn't point to a MyStruct object yet.
Run Code Online (Sandbox Code Playgroud)

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

  • 那么,对于这个值得投票的答案,有什么争议或错误呢? (4认同)