m0_37632283
TBACAMILLE
2018-08-04 09:32
采纳率: 53.8%
浏览 2.4k

关于C++中结构体的构造函数中带冒号的问题

 struct Matrix {
   int a, b;
     Matrix(int a = 0,int b=0) : a(a),b(b) { }
} m[26];

构造函数中是对里面的成员变量设置默认值,那为什么在上述代码中已经初始化之后还要再加冒号呢?
另外有冒号的这一行是什么意思。新手小白一个,请大神指教,非常感谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • caozhy
    已采纳

    Matrix(int a = 0,int b=0)
    这个可不是“对里面的成员变量设置默认值”
    而是缺省参数
    也就是当你用
    Matrix m()的时候,相当于Matrix m(0,0)
    而Matrix m(123)的时候相当于 Matrix m(123,0)
    缺少的参数由你的缺省值补进去

    至于这个a b参数,并没有传给作为成员变量的a b!!!

    点赞 3 评论
  • caozhy

    相当于
    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)就是调用这个构造函数。

    点赞 评论
  • x526198197
    噬魂松 2018-08-05 02:18

    冒号后面跟的是参数列表,如1,2楼说的,优先于构造函数初始化变量,调用的是成员变量相应的构造函数。

    作为新手,其实你可以思考下const的成员要如何初始化,你就能很好的理解冒号的作用了

    点赞 评论
  • luyong4561
    luyong4561 2018-08-06 10:44

    冒号后面的作用是调用每个数据成员的构造函数。

    点赞 评论
  • mayh554024289
    chomol 2018-08-08 02:19

    这就是一个初始化列表,你只需要理解Matrix(int a = 0,int b=0) : a(a),b(b) 这句,构造的时候 Matrix(1,2), 那么相当于给结构体内部的a b赋值,即 a = 1; b=2;

    点赞 评论

相关推荐