(二十一)QT的构造函数重载

2023-11-07

在实际开发中,我们可能遇到一个问题:对于一个类,我们可能需要传递给它不同的参数,让它执行不同的行为;或者在使用旧的类时,我们希望加上一个新的参数,但是这个参数在旧的逻辑中不使用,需要在新的逻辑中使用,如果我们改了这个类,会导致使用旧的类的函数同步修改,这是我们不希望的,因为谁都不希望重构旧的代码(。。。)

遇到以上情况,更多时我们会重新写一个方法或者干脆新建一个类,但是如果你需要使用老的类中的函数并且老的函数大量重复,这就会造成代码冗余,遇到这个问题,其实我们可以考虑重载构造函数,使用多个构造函数达到这个目的。声明类传入不同的参数即可达到目的。

如下:
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);
}

结果如下:
在这里插入图片描述

理解起来并不难:你可以把构造函数重载看成多胞胎,这几个孩子长得类似,但是一个需要苹果才和你玩,一个需要苹果和桃子才和你玩,一个需要桃子和李子才和你玩,你要找对应的孩子玩,就要拿出他们想要的东西才可以。
你只拿出苹果,省略了桃子,那么你只能叫出“需要苹果”的孩子,编译器这个“家长”肯定不会把“需要苹果和桃子”的孩子分派给你玩。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(二十一)QT的构造函数重载 的相关文章

随机推荐

  • 基于ubuntu操作系统下的Qt的安装

    1 首先下载安装包 进入官网下载地址 http download qt io 如图所示 顺带说说目录结构 archive 各种 Qt 开发工具安装包 新旧都有 可以下载 Qt 开发环境和源代码 community releases 社区定制
  • Android 复杂首页搭建BaseMultiItemQuickAdapter,详解简单易学

    关于不同类型多布局的展示BaseMultiItemQuickAdapter详解 二 新篇章 对于Android 初学者来说 说到数据展示 相信大家对一定会想到ListView 或者 RecyclerView 但是简单的数据展示这个确实没毛病
  • ubuntu java sdk_ubuntu16.04配置android SDK环境

    对于很多新手来说 在配置任何环境的时候一篇非常好的指导安装方案是最合适不过的 我也是从这个坑慢慢爬出来的 反复的搜索文章反复的测试来配置安装环境 为了大家也为了自己以后的方便 今天就为大家整理一套即完整又详细的Android环境配置步骤 如
  • 云计算和物联网之间是什么关系,主要有什么区别?

    云计算和物联网是当今IT业界的两大焦点 它们有很大的区别 但同时也有着千丝万缕的联系 物联网通过数量惊人的传感器采集到难以计数的数据量 而云计算可以对这些海量数据进行智能处理 云计算是物联网发展的基石 而物联网又是云计算的最大用户 促进着云
  • Charles乱码和SSL 代理问题解决

    在刚接触Charles进行抓包使用时 遇到了两个问题 1 Charles上抓的包出现了乱码 2 Charles开启SSL Proxying代理后出现了手机无法上网或手机和电脑浏览器都无法上网的情况 浏览器提示证书不可用或过期 尝试了很久终于
  • SpringBoot开启事务

    Java知识点总结 想看的可以从这里进入 目录 2 12 事务开启 2 12 事务开启 Spring Boot使用的是Spring 事务管理机制 对事务管理提供了一个顶层的接口PlatformTransactionManager 对所支持的
  • RPA让采购流程更加高效丨采购领域应用RPA的5大场景

    采购是企业生产经营中必不可少的环节之一 也是企业成本构成的主要因素 企业采购形式多样 包括招标 竞争性谈判 磋商 询价 竞价等 如今 互联网的发展已经升级了采购模式 借力RPA提升采购效率 则是企业确保供应 降低成本 实现可持续发展的一个良
  • 深度学习实战(四):行人跟踪与摔倒检测报警

    深度学习实战 四 行人跟踪与摔倒检测报警 1 项目简介 1 1 相关工作 2 方法简介 2 1 总体结构 2 2 骨架的图结构 2 3 空间图卷积网络 2 3 1 Sampling Function 2 3 2 Weight Functio
  • 大修或新更换的电压互感器TV为什么要核相(定相)?

    大修或新更换的电压互感器TV为什么要核相 定相 答 大修或新更换的互感器 含二次回路更动 在投入运行前应核相 定相 所谓定相 就是将TV一次侧在同一电源上 测定它们的二次侧电压相位是否相同 若相位不正确 会造成如下结果 1 破坏同期的正确性
  • [JSOI2018]机器人

    题目描述 一个 n m n times m n m的网格 有一个机器人一开始在 1 1
  • 画图软件怎么做性能测试,软件性能测试能力提升解决方案.pdf

    软件性能测试能力提升解决方案 软件性能测试能力提升解决方案 软件性能测试能力提升解决方案 软软件件性性能能测测试试能能力力提提升升解解决决方方案案 课程试用 课程试用 课课程程试试用用 测试经理 TM 测试主测 TC 测试架构师 TAE 测
  • ChatGPT充值,银行卡被拒绝,图文教程

    目录 前言 步骤 1 魔法地址选择 2 选择手机号码 归属地 3 勾选 服从协议 4 填写信息 5 完善账单地址 6 订阅成功 前言 大家好 今天我在订阅ChatGPT4时 遭遇了银行卡被拒绝的尴尬境地 这里有个技巧 助你开心畅享ChatG
  • 大数据和人工智能的关系,超全解析

    大数据拥抱云计算 在PaaS层中一个复杂的通用应用就是大数据平台 大数据是如何一步一步融入云计算的呢 1数据不大也包含智慧 一开始这个大数据并不大 原来才有多少数据 现在大家都去看电子书 上网看新闻了 在我们80后小时候 信息量没有那么大
  • 使用C++封装MySQL API的教程(Python)

    在本教程中 我们将学习如何使用C 封装MySQL的API 并使用Python作为示例 我们将创建一个简单的程序 通过C 封装的MySQL API连接到MySQL数据库 并执行一些基本的数据库操作 MySQL是一个流行的开源关系型数据库管理系
  • ESP32(MicroPython)LVGL图形界面 RGB灯闪烁控制器

    ESP32 MicroPython RGB灯闪烁控制器 本程序通过依次调整RGB灯中每个灯的P 频率和占空比实现对RGB灯闪烁的控制 import lvgl as lv import time from espidf import VSPI
  • 【Shell牛客刷题系列】SHELL10 第二列是否有重复:复习sort命令和uniq命令~

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 本文主要涉及的命令是sort命令和uniq命令 这
  • Python_inspect的使用

    The inspect module provides several useful functions to help get information about live objects such as modules classes
  • Kafka基础知识(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 消息队列 作用 优点 异步处理 使用微信 进行建行卡支付时 如果没资
  • 每日一题分享(三)

    给你一个含 n 个整数的数组 nums 其中 nums i 在区间 1 n 内 请你找出所有在 1 n 范围内但没有出现在 nums 中的数字 并以数组的形式返回结果 分析 第一种思路 1 我们可以新定义一个数组 里面放的就是1到n的数 2
  • (二十一)QT的构造函数重载

    在实际开发中 我们可能遇到一个问题 对于一个类 我们可能需要传递给它不同的参数 让它执行不同的行为 或者在使用旧的类时 我们希望加上一个新的参数 但是这个参数在旧的逻辑中不使用 需要在新的逻辑中使用 如果我们改了这个类 会导致使用旧的类的函