• 4935阅读
  • 3回复

关于类的构造函数 [复制链接]

上一主题 下一主题
离线20071002871
 
只看楼主 倒序阅读 楼主  发表于: 2010-03-10
是KDE 2_Qt编程宝典中的一个例子,有些地方不明白,特此请教。

(1) threewidget.h

#ifndef THREEWIDGET_H
#define THREEWIDGET_H

#include<qpushbutton.h>
#include<qlabel.h>

class threewidget:public QWidget
{
public:
    threewidget(QWidget *p=0,const char *name=0);
private:
    QPushButton *topButton;
    QPushButton *bottomButton;
    QLabel *label;
};

#endif // THREEWIDGET_H

(2) threewidget.cpp

#include"threewidget.h"

threewidget::threewidget(QWidget *p, const char *name)
{
      setMinimumSize(120,180);
      setMaximumSize(120,180);

      topButton=new QPushButton("top",this);

      topButton->setGeometry(15,15,90,40);

      label=new QLabel("love",this);
      label->setGeometry(15,70,90,40);
      label->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter);

      bottomButton=new QPushButton("bottom",this);
      bottomButton->setGeometry(15,125,90,40);

}

(3) main.cpp

#include <QtGui/QApplication>
#include "widget.h"
#include"threewidget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    threewidget w;
    w.setGeometry(10,10,100,100);
    w.show();
    return a.exec();
}

程序的确能正常运行,但有以下不解....

threewidget(QWidget *p=0,const char *name=0)显然是个构造函数,而在main.cpp中却    threewidget w;并没有提供参数,是如何实现初始化的呢?

且topButton=new QPushButton("top",this);this显然是threewidget类型的指针,而且看出现的提示,是指QPushButton中的某个系统默认构造函数吗?

而且我觉得threewidget并没利用参数,所以将其形参表清空后出现如下错误,
undefined reference to `threewidget::threewidget(QWidget*, char const*)'

难度系统早就默认了吗?那如果部件多次嵌套又该怎么办呢?


本人近几天接触的QT,很多不懂,望大家不吝解释下,谢谢。。。


离线dbzhang800

只看该作者 1楼 发表于: 2010-03-11
你问了两个C++的语法问题,建议找本C++的书好好看看
离线20071002871
只看该作者 2楼 发表于: 2010-03-11
引用第1楼dbzhang800于2010-03-11 08:34发表的  :
你问了两个C++的语法问题,建议找本C++的书好好看看



非常感谢回复,昨晚接着看书,上面的问题理解了许多,但第一个问题还没完全透彻。呵呵,我会去看C++ primer,你提的意见很中肯,我对C++确实理解的很不透彻,没入门。
离线20071002871
只看该作者 3楼 发表于: 2010-03-11
引用第1楼dbzhang800于2010-03-11 08:34发表的  :
你问了两个C++的语法问题,建议找本C++的书好好看看


突然想明白了,脑残了,具有默认实参时,所需实参是可以少去的,让大牛们见笑了......
快速回复
限100 字节
 
上一个 下一个