5

只是 Qt 中常见结构化类的一部分:

class MyClass  :  public QWidget           
{

Q_OBJECT

 public:

   MyClass(QWidget *parent = 0);
.
.
.
}

看构造函数看不懂参数的意思(QWidget *parent = 0)?这是什么意思?

问候

4

4 回答 4

12

MyClass(QWidget *parent = 0)定义了一个可以采用QWidget*.

您可能会对此部分感到困惑,即默认参数= 0的 C++ 语法。默认参数允许您使用该函数而无需指定该特定参数。在这种情况下,您可以像这样调用此构造函数:

mc = MyClass();

这相当于调用:

mc = MyClass(0); // or MyClass(NULL)

这意味着MyClassobject 将没有 parent QWidget,因为= 0意味着 parent 是一个空指针。

于 2012-05-14T21:10:21.867 回答
4

当你构造一个新的 MyClass 时,你给它一个指向你想成为新的父级的 QWidget 的指针。这= 0意味着如果您不提供参数,它将没有父级。或者,更严格地说,它的父指针将被设置为 NULL。

于 2012-05-14T21:07:15.893 回答
4

首先,在构造函数之后使用显式关键字很好

explicit MyClass(QWidget *parent = 0 );

通过使用显式,这意味着您将无法进行隐式分配。

为了更好地理解让我们举个例子

假设您创建了一个 MyInteger 类,它在构造函数中接受一个整数。然后你可以写这样的东西:

MyInteger integer = 5;

对于简单的类,这可以正常工作,但是当您有复杂的类时,隐式赋值可能会导致错误。因此最好有明确的分配:

MyInteger integer = MyInteger(5);

这样你就可以确定一切都是正确的。是一种保障。

语句“QWidget *parent = 0”怎么样!

那是做什么用的?

您定义一个具有默认值的构造函数。这种情况下的默认值意味着没有父级。将 0 分配给指针(在这种情况下)

MyClass(QWidget *parent = 0)

意味着您创建了一个指向任何内容的指针。在任何正常情况下,您都希望指针指向内存中的某个地址,例如父窗口小部件的地址。但是,例如,当您不想设置父小部件时,您可以不指向任何内容。请注意,尽管在使用指针时,请始终检查它是否确实指向某些东西(最好是正确的东西),或者不要对它做任何事情。

于 2016-04-28T07:17:07.127 回答
2

这是一个默认参数。如果未提供参数,则使用提供的参数。

于 2012-05-14T21:11:09.017 回答