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_()
    {
    }
};

注意:

  1. 我将struct命名为numbers,然后给它一个无参数构造函数
  2. 此外,您的代码中存在编译时错误。 access specifers(在你的例子中是private)后面必须跟一个冒号:),不是 分号(;)
  3. 我为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;
}