Qt カスタム ウィンドウ クラスで、独自のコンストラクターを実装するときに、初期化コンストラクター リスト内の親クラスのコンストラクターを呼び出すのはなぜですか?

TestQt::TestQt(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
}

       単に Qt を使用するのではなく Qt を学習している場合、初期化コンストラクター リストで親クラス QWidget (parent) のコンストラクターを見たときに疑問が生じると思います。以下では、何に使用されるのか、なぜ必要なのかという 2 つの質問に答えます。

       まず、これが必要な理由について説明します:
       これは非常に簡単に答えられます。その機能は、サブクラス オブジェクトに含まれる親クラスの変数を初期化することです。このコードのように:

#include <iostream>
class A
{

public:
    explicit a()
    {
        c = 1;
        b = 2;
    }
    void getbc()
    {
        std::cout << c << b;
    }
private:
    int c;
    int b;
};

class B :public A
{
public:
    explicit b();

private:
    int c;
};
int main()
{
    B ad;
    ad.getab();
}



B::b():A()
{
}

親クラスのコンストラクターが呼び出されないと変数の値が不明となり、初期化されていない変数を使用すると予期せぬエラーが発生します。

     その理由は次のとおりです

      実際、qt の親クラスのメンバー変数は、サブクラスの構築初期化パラメーター リストで直接初期化できないため、ここで親クラスのコンストラクターが呼び出されます。親クラス変数を直接初期化できる場合は、親クラスのコンストラクターを使用せずに変数を直接初期化することも可能です。

おすすめ

転載: blog.csdn.net/qq_51710331/article/details/130535629