C ++类构造函数语法的解释?

时间:2017-11-07 12:24:45

标签: c++

通过 C ++编程语言,第4版阅读,有一个如此定义的类

class Vector
{
    private:
        int sz;
        double *a;
    public:
        Vector(int s) :elem{new double[s]}, sz{s} {}
}

我对这个构造函数语法的工作原理有点困惑。我相信Vector(int s)正在创建一个构造函数,它接受一个参数s,并初始化elemsz。但为什么会有:?我认为函数体被{}包围了?那么最后的空括号{}会起什么作用呢?

3 个答案:

答案 0 :(得分:5)

:被称为初始化列表,用于在调用构造函数时快速简洁地设置成员变量的值。

{}是构造函数的方法体。由于构造函数与方法类似,因此必须存在用于编译代码的主体。由于不需要任何代码,因此使用空体,因此函数不执行任何操作。

答案 1 :(得分:2)

这是Initializer List的初始化。

答案 2 :(得分:1)

:用于"初始化"类的成员(此方法也称为 成员初始化列表)

使用:和函数体{}

之间存在重大差异

initiallizer list :初始化类的成员,而构造函数体{}将值赋给类的成员。

差异可能看起来不是很大,但它实际上是初始化const数据类型和reference数据类型成员(只能在声明期间初始化)的唯一方法。

所以当你这样做时

class Test
{
const int i; const string str;
public:
Test(int x, string y):i{x},str{y};
}

这样可行,但是如果您尝试通过在构造函数体中编写代码来为const int iconst string str赋值,则会导致结果

  

那么最后的空括号{}会起什么作用?

没有任何东西只是强制放置那些括号(即使它是空的)

当您在main函数中创建类的对象并将其传递给所需的参数时,它们基本上可以充当函数。