首頁  >  問答  >  主體

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

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

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



}

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

阿神阿神2714 天前589

全部回覆(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
  • 取消回覆