C++中帶有預設引數的宣告和定義。Qt中重寫預設建構函式。C++中函式呼叫時實參個數和函式定義時的形參個數不一致時的處理。
阿新 • • 發佈:2018-12-13
1、Qt中自動生成的建構函式
(1)Qt中自動生成的建構函式的宣告
class Chat : public QWidget
{
Q_OBJECT
public:
explicit Chat(QWidget *parent = 0); //宣告建構函式,可以帶有初始值“=0”,表該引數為預設引數且呼叫時該引數可省略
~Chat();
private:
Ui::Chat *ui;
};
其中 “explicit Chat(QWidget *parent = 0);”為宣告的建構函式,QWidget *parent = 0代表該引數為預設引數且呼叫時該引數可省略,即呼叫時該函式可以沒有實參。
(2)Qt中自動生成的建構函式的定義
Chat::Chat(QWidget *parent) : //建構函式的定義,注意不能帶有初始值“=0”
QWidget(parent),
ui(new Ui::Chat)
{
ui->setupUi(this);
}
其中,建構函式:Chat::Chat(QWidget *parent) : QWidget(parent),ui(new Ui::Chat){......}形式中,“::”前的Chat表示類名,“::”後的Chat為成員函式,其名稱與類相同,表示該類的建構函式,(QWidget *parent)
Chat::Chat(QWidget *parent ) :QWidget(parent) { ui = new Ui::Chat; ui->setupUi(this); }
2、重寫Qt中的預設建構函式
(1)重寫Qt中的預設建構函式的宣告
class Chat : public QWidget
{
Q_OBJECT
public:
explicit Chat(QString destUser, QWidget *parent = 0);//注意:預設引數必須是函式引數列表中最右邊的引數
~Chat();
private:
Ui::Chat *ui;
};
注意:預設引數必須是函式引數列表中最右邊的引數,在函式呼叫的時候可以省略,當呼叫該函式時若實參的個數和定義時形參的個數不一致時,預設是從左往右匹配,所以預設引數要放在函式列表的最右邊。如:
void Widget::on_userTableWidget_doubleClicked(const QModelIndex &index)
{
int row = index.row(); //返回點選的行
if(row != ui->userTableWidget->rowCount() - 1){
QString destUser = ui->userTableWidget->item(row,0)->text();
Chat *chat = new Chat(destUser); //只傳入一個型別為QString的實參,從左往右匹配
chat->show();
}else{
QMessageBox::information(this, tr("提示"), tr("不能與自己聊天"));
}
}
(2)重寫Qt中的預設建構函式的定義
Chat::Chat(QString destUser, QWidget *parent ) ://注意:定義時都不能帶有預設值
QWidget(parent),
ui(new Ui::Chat)
{
qDebug()<<destUser;
ui->setupUi(this);
}
注意:函式定義時的函式列表中都不能帶有預設值。