构造函数MyClass(QWidget * parent = 0)中(QWidget * parent = 0)的含义;

时间:2012-05-14 21:05:52

标签: c++ qt constructor

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

class MyClass  :  public QWidget           
{

Q_OBJECT

 public:

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

查看构造函数我不明白参数(QWidget *parent = 0)的含义?这是什么意思?

问候

4 个答案:

答案 0 :(得分:8)

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

的构造函数

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

mc = MyClass();

这相当于调用:

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

这意味着MyClass对象将没有父QWidget,因为= 0表示父对象是空指针。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

首先,使用显式关键字后面的关键字

是很好的
explicit MyClass(QWidget *parent = 0 );

通过使用explicit,意味着您将无法进行隐式赋值。

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

假设您创建了一个在构造函数中采用整数的类MyInteger。然后你可以这样写:

MyInteger integer = 5;

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

MyInteger integer = MyInteger(5);

这样你就可以确定一切都是正确的。这是一个安全措施。

声明怎么样" QWidget * parent = 0"!

这是为了什么?

使用默认值定义构造函数。在这种情况下,默认值意味着没有父级。 将0分配给指针(在本例中)

MyClass(QWidget *parent = 0)

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

答案 3 :(得分:2)

这是默认参数。如果没有提供参数,则使用提供的参数。