只是 Qt 中常见结构化类的一部分:
class MyClass : public QWidget
{
Q_OBJECT
public:
MyClass(QWidget *parent = 0);
.
.
.
}
看构造函数看不懂参数的意思(QWidget *parent = 0)
?这是什么意思?
问候
只是 Qt 中常见结构化类的一部分:
class MyClass : public QWidget
{
Q_OBJECT
public:
MyClass(QWidget *parent = 0);
.
.
.
}
看构造函数看不懂参数的意思(QWidget *parent = 0)
?这是什么意思?
问候
MyClass(QWidget *parent = 0)
定义了一个可以采用QWidget*
.
您可能会对此部分感到困惑,即默认参数= 0
的 C++ 语法。默认参数允许您使用该函数而无需指定该特定参数。在这种情况下,您可以像这样调用此构造函数:
mc = MyClass();
这相当于调用:
mc = MyClass(0); // or MyClass(NULL)
这意味着MyClass
object 将没有 parent QWidget
,因为= 0
意味着 parent 是一个空指针。
当你构造一个新的 MyClass 时,你给它一个指向你想成为新的父级的 QWidget 的指针。这= 0
意味着如果您不提供参数,它将没有父级。或者,更严格地说,它的父指针将被设置为 NULL。
首先,在构造函数之后使用显式关键字很好
explicit MyClass(QWidget *parent = 0 );
通过使用显式,这意味着您将无法进行隐式分配。
为了更好地理解让我们举个例子
假设您创建了一个 MyInteger 类,它在构造函数中接受一个整数。然后你可以写这样的东西:
MyInteger integer = 5;
对于简单的类,这可以正常工作,但是当您有复杂的类时,隐式赋值可能会导致错误。因此最好有明确的分配:
MyInteger integer = MyInteger(5);
这样你就可以确定一切都是正确的。是一种保障。
语句“QWidget *parent = 0”怎么样!
那是做什么用的?
您定义一个具有默认值的构造函数。这种情况下的默认值意味着没有父级。将 0 分配给指针(在这种情况下)
MyClass(QWidget *parent = 0)
意味着您创建了一个指向任何内容的指针。在任何正常情况下,您都希望指针指向内存中的某个地址,例如父窗口小部件的地址。但是,例如,当您不想设置父小部件时,您可以不指向任何内容。请注意,尽管在使用指针时,请始终检查它是否确实指向某些东西(最好是正确的东西),或者不要对它做任何事情。
这是一个默认参数。如果未提供参数,则使用提供的参数。