在C ++中初始化Class的成员变量的位置

时间:2016-08-31 02:25:11

标签: c++

我刚开始使用C ++。我有个问题。我应该在哪里初始化类成员变量?我使用一些成员函数为成员变量赋予了一些值。但静态分析工具抱怨构造函数中的成员初始化。请参阅以下示例:

TEST.CPP

#include<iostream>
using namespace std;

class Point {
private:
    int x;
    int y;
public:
    Point(int r)
    {
      y = r;
    } 

    inline void setXval(int x_val) {
       x = x_val;
    }
};

这里,该工具表示x未在构造函数中初始化。但我在成员函数中设置x值。这是正确的方法吗?或者我们应该始终初始化默认构造函数中的所有成员?任何帮助深表感谢。提前谢谢!

3 个答案:

答案 0 :(得分:2)

所有变量都应该在构造函数中获得显式值。你没有给x任何价值,所以你的工具是正确的。您可能会或者可能不会调用稍后为x设置值的成员函数 - 您不能指望您(或代码的用户)在您需要某处x的值之前调用该函数

答案 1 :(得分:1)

您的工具希望您使用初始化列表:

class Point {
private:
    int x;
    int y;
public:
    Point(int x, int y) : x(x), y(y) {}
};

答案 2 :(得分:1)

您应该在构造函数中构造每个类成员。 会员职能可以改变班级成员&#39;价值,但它不能构建它们。

Point(int _x, int _y): x(_x), y(_y) {}