TestQt::TestQt(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}
단순히 Qt를 사용하지 않고 Qt를 학습하는 경우 초기화 생성자 목록에서 부모 클래스 QWidget(부모)의 생성자를 보면 의문이 생길 것이라고 생각합니다. 다음은 두 가지 질문에 대한 답입니다. 용도는 무엇이며 왜 필요한가요?
먼저 이것이 필요한 이유에 대해 이야기해 보겠습니다.
이는 매우 간단하게 대답할 수 있습니다. 그 기능은 하위 클래스 객체에 포함된 상위 클래스 변수를 초기화하는 것입니다. 다음 코드와 같습니다:
#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의 상위 클래스 멤버 변수는 하위 클래스의 생성 초기화 매개변수 목록에서 직접 초기화할 수 없으므로 여기에서 상위 클래스 생성자가 호출됩니다. 부모 클래스 변수를 직접 초기화하는 것이 가능하다면, 부모 클래스 생성자 없이 변수를 직접 초기화하는 것도 가능하다.