ホームページ  >  に質問  >  本文

C++语法问题,有点不太明白

各位大神,有个不太明白的C++语法 :

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{



}

这语法里面 函数参数后面 : QWidget(parent) 是什么意思呢 不太明白了?

阿神阿神2765日前610

全員に返信(9)返信します

  • PHP中文网

    PHP中文网2017-04-17 13:08:58

    基类构造函数的初始化。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 13:08:58

    这是在调用基类QWidget的构造函数,parent是传入基类构造函数的参数

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:08:58

    类外定义构造函数和基类构造函数

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:08:58

    初始化列表,在初始化列表中显示调用父类构造函数

    返事
    0
  • PHPz

    PHPz2017-04-17 13:08:58

    c++ 的基本语法,初始化列表。

    返事
    0
  • 迷茫

    迷茫2017-04-17 13:08:58

    这是成员初始化列表(Member Initializer List),它的用途是当QWidget* parent这个参数传入Widget的构造函数时,Widget类里的QWidget成员将以parent初始化,即QWidget(parent)。
    使用成员初始化列表的好处是可以减少拷贝,例:

      //假使QWidget的类型为SomeWidget
     Widget::Widget(QWidget *parent) {
        //QWidget = parent;//Wrong!这是一个赋值行为
        QWidget = SomeWidget(parent);//Correct,但是QWidget被初始化了两次
      };
      

    这是因为C++规定,成员变量的初始化发生在进入构造函数之前,也就是QWidget这个成员
    会在进入构造函数前被初始化,在这里是默认构造函数初始化的。所以上面代码中QWidget被
    初始化了两次,外加 = 操作符(Assign Operator)被调用一次,这些操作开销是比使用成员
    初始化列表高的。所以一般而言都尽量使用成员初始化列表。即:

      Widget::Widget(QWidget *parent)
        : QWidget(parent)
      {
      }
      
      
    

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 13:08:58

    调用父类的构造函数啊,这个看C++ Primer上面有写的

    返事
    0
  • PHPz

    PHPz2017-04-17 13:08:58

    构造函数初始化列表,第一列可以使用父类的构造函数。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 13:08:58

    就是调用父类的构造函数。

    返事
    0
  • キャンセル返事