包含对象的 C++ 结构
c++ structure containing object
我想创建一个结构,比如说Mystruct,它包含一个整数和一个myObj对象,其构造函数需要2个参数(一个是字符串,另一个是int)。我的意思是我想要:
struct Mystruct{
myObj obj();
int a;
};
现在,经过一些操作,我想创建一个 Mystruct 变量和 initiliaze 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
对象。
首先,您的代码片段无效,因为您没有为结构实例分配内存。你也不能那样做。您应该在结构中定义一个构造函数,该构造函数将在 mem 初始值设定项列表中调用 obj 的构造函数,前提是 obj 没有默认构造函数。
作为
struct Mystruct{
Mystruct( syting s, int i ) : obj( s, i ) {}
myObj obj;
int a;
};
caesar 说 MyObj 有两个参数作为构造函数。因此,MyObj类似于下面的代码。
struct MyObj
{
MyObj(string name, int number)
: name_(name), number_(number) {}
string name_;
int number_;
};
然后,MyStruct 有一个 MyObj 作为成员变量,所以它必须有如下所示的用户定义构造函数,因为 MyObj 没有默认构造函数,所以 MyStruct 也不能有默认构造函数。
struct MyStruct{
MyStruct(MyObj obj, int a)
: my_obj_(obj), a_(a) {}
MyObj my_obj_;
int a_;
};
int main()
{
MyObj my_obj("tester", 1001);
MyStruct my_struct(my_obj, 1);
getchar();
return 0;
}
假设myObj
没有默认构造函数(没有参数),您不能只创建未初始化myObj
的Mystruct
。正确的方法是通过Mystruct
构造函数传递myObj
值(或者更好的是对值的引用):
struct Mystruct{
myObj obj;
int a;
Mystruct(int a, const myObj& obj) : a(a), obj(obj) {}
};
这里: a(a), obj(obj)
所谓的初始化列表。 a(foo)
表示在构造对象时foo
初始化a
Mystruct
。在上面的示例中a
Mystruct 的成员正在使用构造函数参数中的值进行初始化a
。看起来有点奇怪,但要避免繁琐的参数名称,如_a
等。
然后像这样初始化它:
Mystruct foo(5, myObj("test", 3));
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- 在 c++ 中拥有一组结构的正确方法是什么?
- vscode g++链路故障:体系结构x86_64的未定义符号
- C++概念:如何使用'concept'检查模板化结构的属性?