C++中如何在构造函数中初始化一个对象
How to initialize a object in the constructor in C++
我在 C++ 中有以下代码:
//这是头文件,test.h
typedef struct
{
int a;
int b;
} Numbers;
class Test
{
private;
Numbers numbers_;
};
//这是源文件,test.cpp
#include "test.h"
Test::Test()
{}
然后我 运行 对其进行 lint,它说警告 1401 成员 "numbers_" 未由构造函数初始化
我知道如何在构造函数中初始化内置类型,但是如何初始化像 Numbers
这样的类型?
这是你应该做的:
typedef struct numbers
{
int a;
int b;
numbers()
{
a = 0;
b = 0;
}
} Numbers;
class Test
{
private:
Numbers numbers_;
public:
Test() : numbers_()
{
}
};
注意:
- 我将
struct
命名为numbers
,然后给它一个无参数构造函数。
- 此外,您的代码中存在编译时错误。 access specifers(在你的例子中是
private
)后面必须跟一个冒号(:
),不是 分号(;
)
- 我为
Test
添加了一个无参数构造函数,并使用initializer_list来调用[的构造函数=17=].
为您的结构使用构造函数。
你会在这里找到一些例子:
enter link description here
初始化 class 成员的方法有很多种。
您可以对其进行聚合初始化,为每个成员赋值:
Test::Test() : numbers_{42,53} {}
或者您可以对其进行值初始化,将每个成员设置为零:
Test::Test() : numbers_() {}
或者,如果您不是特别需要 Numbers
class 是纯数据,那么您可以让它自行初始化。你可以给每个成员一个 in-class initialiser:
int a = 42;
int b = 53;
或者你可以给它一个构造函数:
struct Numbers // the class needs a name to declare a constructor
{
Numbers() : a(42), b(53) {}
int a;
int b;
};
或者,也许您可以忽略或禁用该警告,但在使用它们之前要小心地为未初始化的成员赋值。
如果您不想为 Numbers 编写自定义构造函数 class 您也可以简单地在 Test 构造函数中初始化成员对象的字段:
Test::Test()
{
numbers_.a = 0;
numbers_.b = 0;
}
我在 C++ 中有以下代码:
//这是头文件,test.h
typedef struct
{
int a;
int b;
} Numbers;
class Test
{
private;
Numbers numbers_;
};
//这是源文件,test.cpp
#include "test.h"
Test::Test()
{}
然后我 运行 对其进行 lint,它说警告 1401 成员 "numbers_" 未由构造函数初始化
我知道如何在构造函数中初始化内置类型,但是如何初始化像 Numbers
这样的类型?
这是你应该做的:
typedef struct numbers
{
int a;
int b;
numbers()
{
a = 0;
b = 0;
}
} Numbers;
class Test
{
private:
Numbers numbers_;
public:
Test() : numbers_()
{
}
};
注意:
- 我将
struct
命名为numbers
,然后给它一个无参数构造函数。 - 此外,您的代码中存在编译时错误。 access specifers(在你的例子中是
private
)后面必须跟一个冒号(:
),不是 分号(;
) - 我为
Test
添加了一个无参数构造函数,并使用initializer_list来调用[的构造函数=17=].
为您的结构使用构造函数。
你会在这里找到一些例子:
enter link description here
初始化 class 成员的方法有很多种。
您可以对其进行聚合初始化,为每个成员赋值:
Test::Test() : numbers_{42,53} {}
或者您可以对其进行值初始化,将每个成员设置为零:
Test::Test() : numbers_() {}
或者,如果您不是特别需要 Numbers
class 是纯数据,那么您可以让它自行初始化。你可以给每个成员一个 in-class initialiser:
int a = 42;
int b = 53;
或者你可以给它一个构造函数:
struct Numbers // the class needs a name to declare a constructor
{
Numbers() : a(42), b(53) {}
int a;
int b;
};
或者,也许您可以忽略或禁用该警告,但在使用它们之前要小心地为未初始化的成员赋值。
如果您不想为 Numbers 编写自定义构造函数 class 您也可以简单地在 Test 构造函数中初始化成员对象的字段:
Test::Test()
{
numbers_.a = 0;
numbers_.b = 0;
}