(⼆⼗⼀)QT的构造函数重载
在实际开发中,我们可能遇到⼀个问题:对于⼀个类,我们可能需要传递给它不同的参数,让它执⾏不同的⾏为;或者在使⽤旧的类时,我们希望加上⼀个新的参数,但是这个参数在旧的逻辑中不使⽤,需要在新的逻辑中使⽤,如果我们改了这个类,会导致使⽤旧的类的函数同步修改,这是我们不希望的,因为谁都不希望重构旧的代码(。。。)
遇到以上情况,更多时我们会重新写⼀个⽅法或者⼲脆新建⼀个类,但是如果你需要使⽤⽼的类中的函数并且⽼的函数⼤量重复,这就会造成代码冗余,遇到这个问题,其实我们可以考虑重载构造函数,使⽤多个构造函数达到这个⽬的。声明类传⼊不同的参数即可达到⽬的。
如下:
calculate.h⽂件
#ifndef CALCULATE_H
#define CALCULATE_H
#include<QObject>
class calculate :public QObject
{
Q_OBJECT
public:
calculate(QObject *parent =0);//传⼊qobject
calculate(int a,int b, QObject *parent =0);//传⼊int和qobject
calculate(int a);//只传⼊int
calculate(int a,double b, QObject *parent =0);//传⼊int double和qobject
};
#endif// CALCULATE_H
calculate.cpp⽂件
#include"calculate.h"
#include<QDebug>
calculate::calculate(QObject *parent):QObject(parent)
{
qDebug()<<"nothing";
}
calculate::calculate(int a,int b, QObject *parent):QObject(parent)
{
qDebug()<<"a + b  = "<<(a+b);
}
calculate::calculate(int a)
{
qDebug()<<"a = "<<(a);
}
calculate::calculate(int a,double b, QObject *parent):QObject(parent)
{
qDebug()<<"a + double b  = "<<(a+b);
}
需要注意的是函数声明,你需要传⼊你想要的构造函数的参数,参数不能少,也不能多,顺序和类型、数量必须完全⼀致,否则编译器可能会选择错构造函数,如下:
MainWindow::MainWindow(QWidget *parent):
QMainWindow(parent),
ui(new Ui::MainWindow),
m_cal(new calculate(parent))
{
ui->setupUi(this);
calculate *m_cal1 =new calculate(1);
calculate *m_cal2 =new calculate(1,2,NULL);
calculate *m_cal3 =new calculate(1,2.0,NULL);
}
结果如下:
理解起来并不难:你可以把构造函数重载看成多胞胎,这⼏个孩⼦长得类似,但是⼀个需要苹果才和你玩,⼀个需要苹果和桃⼦才和你玩,⼀个需要桃⼦和李⼦才和你玩,你要对应的孩⼦玩,就要拿出他
构造函数可以被重载们想要的东西才可以。
你只拿出苹果,省略了桃⼦,那么你只能叫出“需要苹果”的孩⼦,编译器这个“家长”肯定不会把“需要苹果和桃⼦”的孩⼦分派给你玩。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。