struct Matrix {
int a, b;
Matrix(int a = 0,int b=0) : a(a),b(b) { }
} m[26];
构造函数中是对里面的成员变量设置默认值,那为什么在上述代码中已经初始化之后还要再加冒号呢?
另外有冒号的这一行是什么意思。新手小白一个,请大神指教,非常感谢
Matrix(int a = 0,int b=0)
这个可不是“对里面的成员变量设置默认值”
而是缺省参数
也就是当你用
Matrix m()的时候,相当于Matrix m(0,0)
而Matrix m(123)的时候相当于 Matrix m(123,0)
缺少的参数由你的缺省值补进去
至于这个a b参数,并没有传给作为成员变量的a b!!!
这就是一个初始化列表,你只需要理解Matrix(int a = 0,int b=0) : a(a),b(b) 这句,构造的时候 Matrix(1,2), 那么相当于给结构体内部的a b赋值,即 a = 1; b=2;
相当于
Matrix(int a = 0,int b=0)
{
this->a = a;
this->b = b;
}
这是C++的语法,你可以假设下,如果int是一个类,那么你可以想象下:
class int
{
public: int(int x)
{
让这个int = x
}
}
那么
你可以认为
a(a)就是调用这个构造函数。
冒号后面跟的是参数列表,如1,2楼说的,优先于构造函数初始化变量,调用的是成员变量相应的构造函数。
作为新手,其实你可以思考下const的成员要如何初始化,你就能很好的理解冒号的作用了
冒号后面的作用是调用每个数据成员的构造函数。