只是Qt中常见结构化类的一部分:
class MyClass : public QWidget
{
Q_OBJECT
public:
MyClass(QWidget *parent = 0);
.
.
.
}
查看构造函数我不明白参数(QWidget *parent = 0)
的含义?这是什么意思?
问候
答案 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)
这是默认参数。如果没有提供参数,则使用提供的参数。