QT第17节课程笔记-重载

Qt中的重载“<<“运算符 Q_OBJECTpublic:// 声明为友元函数signals:private:int m_data;//cpp// 重载 QDebug 的 << 运算符// 保存当前的 QDebug 状态运行结果Q_OBJECTpublic:// 重载QTextStream的<<,用于序列化// 重载QTextStream的>>,用于反序列化// 这两个就不写了,和上面两个一样// // 重载QDataStream的<<,用于序列化。 阅读详情

2.6 重载

2.5.1 函数重载

在同一个作用域内,可以声明几个功能类似的同名函数,

这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。

下面的实例中,同名函数 print() 被用于输出不同的数据类型:

#include <iostream>
using namespace std;
 
class printData
{
   public:
      void print(int i) {
        cout << "整数为: " << i << endl;
      }
 
      void print(double  f) {
        cout << "浮点数为: " << f << endl;
      }
 
      void print(char c[]) {
        cout << "字符串为: " << c << endl;
      }
};
 
int main(void)
{
   printData pd;
 
   // 输出整数
   pd.print(5);
   // 输出浮点数
   pd.print(500.263);
   // 输出字符串
   char c[] = "Hello C++";
   pd.print(c);
 
   return 0;
}

2.5.2 运算符重载

在C++中,运算符重载是一个允许程序员自定义各种运算符(如 +, -, ==, != 等)在自定义类型(类或结构体)上的行为的特性。这意味着你可以定义类似于内置类型的运算符行为,使你的自定义类型更加直观和易于使用。

基本原则

  1. 不可以创建新的运算符:只能重载已经存在的运算符。
  2. 至少有一个操作数是用户定义的类型:不能重载两个基本类型的运算符。
  3. 不能更改运算符的优先级:重载的运算符保持其原有的优先级和结合性。

示例1:假设我们有一个Person 类,我们可以重载 == 运算符来实现两个Person是否相等的判断。

#include <iostream>

using namespace std;


class Person
{
public:
    string name;
    int inNumberTail;

    bool operator==(Person pTmp);

};
bool Person::operator==(Person pTmp){

    return pTmp.name == name && pTmp.inNumberTail == inNumberTail;
}

int main()
{
    //假设我们认定名字和身份证尾号6位一样的两个对象是同一个人!
    Person p1;
    p1.name = "张三";
    p1.inNumberTail = 412508;

    Person p2;
    p2.name = "张三";
    p2.inNumberTail = 412508;

    bool ret = p1 == p2;
    cout << ret << endl;

    return 0;
}

示例2:假设我们有一个简单的 Point 类,我们可以重载 + 运算符来实现两个点的加法。

class Point {
public:
    int x, y;

    // 重载 + 运算符
    Point operator+(const Point& other) const {
        return Point(x + other.x, y + other.y);
    }
};

int main() {
    Point p1;
    p1.x = 1;
    p1.y = 2;
    
    Point p2;
    p2.x = 2;
    p2.y = 3;
    
    Point p3 = p1 + p2;  // 使用重载的 + 运算符
    std::cout << "p3.x: " << p3.x << ", p3.y: " << p3.y << std::endl; // 输出 p3.x: 4, p3.y: 6
    return 0;
}

在这个例子中,operator+ 被重载为一个成员函数,接受一个 Point 类型的常量引用作为参数,并返回两个点相加的结果。

这里的 const 表明这个 operator+ 函数不会修改调用它的 Point 对象。它只是读取对象的 x 和 y 成员,并返回一个新的 Point 对象。这种做法在设计类的时候是很有用的,因为它可以确保某些函数不会意外地改变对象的状态,同时也使得这个函数可以在常量对象上被调用。

注意事项

  • 一致性:重载的运算符应与其原始意图和常见用法保持一致。例如,+ 运算符通常应该实现加法,而不是其他意外的操作。
  • 复杂性:过度使用运算符重载可能导致代码难以理解和维护。确保它们的使用直观且合理。

运算符重载是C++中提高代码可读性和表达力的强大工具,但需要谨慎使用,以保证代码的清晰性和维护性。

Qt基础入门课程笔记 /QApplication抽象了QT的应用程序//QWidget抽象了窗口QWidget w;w.show();//进入消息循环,等待用户输入PS:Ctrl+Tab 切换文件目录Q_OBJECT 指当前类支持信号与槽的机制输出格式调整创建项目,项目右键添加新文件,选择Qt-Qt设计师界面类-Widget-类名:SmallWidget,完成;在smallWidget.ui中添加Spin Box和Horizon Slider控件;在主UI中添加widget控件; 阅读详情

相关推荐

C++/QT学习笔记

C++自带的命名空间std,要声明using namespace std;才可使用,里面是C++语言基本的APInamespace 自定义名称 {这里面可以是数据,函数,与项目相关的一些算法等 } 有点类似C语言的结构体,但又比结构体功能强大,定义到头文件中,使用时要包含头文件还要声明。

weixin_48554101的博客 1611

Qt connect信号与槽 通过函数指针调用重载函数实现自定义组件

Qt connect信号与槽 通过函数指针调用重载函数实现自定义组件

加油加油 1399

零基础Qt笔记<传智教育>Qt版本:2022 5.15

闲来无事记录一下

q5120192609的博客 3644

用qt写C++(函数重载,默认参数,显示时间)

重载规则:1.函数名相同2.参数个数不同,参数类型不同,参数顺序不同,满足一个就可以重载。返回值类型必须相同,不可以是void func(){} 和int func(){}函数名可以一样,就叫作函数重载。

ZHnDo的博客 587

c++程序从QT5(MSVC2015)移植到QT6.2(MSVC2019)

非系统性文档,遇到一个记录一个 项目场景: c++程序从QT5(MSVC2015)移植到QT6.2(MSVC2019) 问题描述: 1. error: C1083: 无法打开包括文件: “QTextCodec”: No such file or directory 原因分析: QT6版本已经去除了QTextcodec,需要使用QT5模块来兼容。 解决方案: 首先在安装QT6时选择QT5兼容模块; 我安装的是QT6.2.2,目前已更新到6.3.0-beta,更新时选择自己已安装的版本的QT5兼容

9480

黑马QT教程笔记合集

QT教程视频地址:未更新完~

彳亍的博客 1625

如何处理Qt5信号槽中的函数重载问题

当我们在信号槽中想选择其中一个信号函数实现信号槽功能时,会出现程序报错,编译不过;为什么会出现这种问题呢?因为qt5信号槽中,对于重载信号函数,我们不能用一个取地址操作符获取其地址。因为对于重载函数,编译器不知道要取哪一个函数的地址,如果不加以区分就会报错。那么怎样才能解决这个问题呢?QObject::connect(信号发出者地址, &信号发出者类名::信号发出者方法, 信号接收者地址, &信号接收者类名::信号接收者方法);第2种方法,使用static_cast进行类型转换。

hi_changeworld的博客 628

C++Qt设计模式笔记(一)

这本书虽然叫这个名字,但是好像与设计模式没有什么关系,介绍的大部分是C++基础和Qt基础,不过无所谓了,查漏补缺,把忘记过的一些知识点再记录一下。...

哇哦~ 6769

Qt C++ 运算符重载详解

为什么对运算符重载? C++中预定义中的运算符的操作对象只限于基本的内置数据类型,但对于我们自定义的类型是没办法操作的,但是在实际开发中,我们要对自定义的类进行类似于内置数据类型的操作运算,这时就需要我们对运算符进行重载,给运算符新的功能,满足实际需求。 C++ 运算符重载的实质? 运算符重载的实质是函数重载或者函数多态,让开发人员用相同的函数名字完成不同的基本操作。运算符函数形式如下: <返回类型说明符> operator <运算符符号>(<参数表>) {

qq_44820566的博客 4028

Qt6与C++17的完美融合——现代GUI开发实践

本文深入探讨了Qt6与C++17的深度融合如何革新现代GUI开发。通过结构化绑定、if constexpr、并行算法等C++17特性在Qt6中的实战应用,展示了如何编写更简洁、安全、高性能的代码。文章结合工业HMI和车载系统等场景,详细解析了现代开发模式、资源管理及迁移指南,为开发者提供了从Qt5升级到Qt6并充分利用现代C++优势的完整路径。

weixin_29008691的博客 391

基于YOLOv5与海康工业相机的高分辨率实时检测实践

本文详细介绍了基于YOLOv5与海康工业相机的高分辨率实时检测实践,通过优化相机配置、网络传输和YOLOv5模型适配,实现了每秒15帧以上的实时检测性能,缺陷识别准确率高达99.2%。特别适用于电子元件焊接点检测、精密齿轮齿痕检查等对微小缺陷敏感的场景。

weixin_30872499的博客 475

Qt:学习笔记一

Qt:学习笔记

weixin_45930573的博客 2615

BGE-Reranker-v2-M3介绍

重排序模型介绍

吉米_王 5895

Qt学习笔记一_qt 如何写 &lt;&lt;

2 处理关闭窗口事件,接收事件e->accept(),事件不会往下传递,不关闭窗口,忽略事件e->ignore(),事件传递给父组件。1 事件与信号,例鼠标按下事件与鼠标按下信号,结果是事件接收后,如果没继续调用事件,事件不会往下传,就不会发送click信号。6 QString格式化Qstring(“(%1,%2)”).arg(e->x()).arg->y());当对某一类事件特殊处理时。1 只要是控件继承于QWidget,就有event(),控件都有event(),我们只需重写。

qq_31546939的博客 670

Look4sat蓝牙追星云台

//这是一个追星云台的小程序 //配合Look4sat蓝牙传输数据(W*** A***),并让电机做出动作 //app设置内填好ESP32的蓝牙MAC,数据格式:W$AZ A$EL //希望大家可以共同改进

HoyAnGx的博客 618

WSL 2 部署 Rocky Linux 9:从零到生产环境配置指南(2025版)

本文详细介绍了如何在WSL 2上部署Rocky Linux 9,从环境准备到生产环境配置的全流程指南。通过优化安装流程和系统配置,帮助开发者和运维工程师在Windows环境下高效运行企业级Linux系统,特别适合需要本地开发但部署到RHEL系服务器的项目。

weixin_28455801的博客 479

告别QT connect编译错误:一份针对重载信号的static_cast避坑指南(含C++11/14/17写法差异)

本文深入解析QT开发中重载信号导致的connect编译错误问题,提供static_cast解决方案的详细指南,并对比不同C++标准(C++11/14/17)下的写法差异。通过实战案例和高级技巧,帮助开发者有效规避类型安全陷阱,构建健壮的信号槽系统。

weixin_27070451的博客 321

基于Simulink的无线充电系统LCC补偿网络建模与控制

本文详细介绍了基于Simulink的无线充电系统LCC补偿网络建模与控制方法。首先分析了无线充电系统面临的核心挑战,提出LCC补偿网络解决方案,阐述了其恒流输出和输入阻抗解耦原理。通过Simulink分步演示了系统建模过程,包括松耦合变压器、LCC+LC补偿网络、功率变换级搭建以及频率跟踪控制实现。仿真结果表明,LCC补偿系统在气隙变化和负载跳变下能保持输出电压稳定(波动±3%),效率达89%。文章还总结了工程实现要点,并探讨了动态充电、多负载系统等扩展应用。该教程为开发高效智能的无线充电系统提供了实用指导

amy_mhd的博客 63

QT基础开发笔记

QT C++ 基础笔记

sukeman的博客 1304

IoT安全软件:Forescout二次开发_Forescout基础架构与原理

Forescout平台是一个集成了多种安全功能的综合解决方案,旨在帮助组织管理和保护其网络中的IoT设备。该平台通过自动发现、分类和监控网络中的设备,提供实时的安全可见性和控制。Forescout的核心优势在于其能够处理混合环境中的各种设备,包括传统IT设备、IoT设备和OT设备。Forescout平台由多个核心组件组成,每个组件负责特定的功能。了解这些组件的运作机制是进行二次开发的基础。假设我们需要定义一个策略,禁止所有厂商为XYZ的设备访问互联网。选择策略类型。

chenlz2007的博客 1965

深入探讨:StoreKit 2的交易处理与收据验证

iOS应用开发中,StoreKit 2带来收据处理和交易验证的新变化。本文通过实例分析,对比传统StoreKit与StoreKit 2的差异,指出直接访问sandboxReceipt文件可能引发错误。解决方案是使用Transaction对象和SKReceiptRefreshRequest,详细介绍了如何初始化ReceiptLoader、处理交易更新及验证收据的完整流程,帮助开发者适应新框架,确保购买流程安全可靠。

m0_74337424的博客 357

Qt6对Qt5兼容问题

由于Qt6的部分模块移动等,导致Qt5代码编译不通过,此处作为记录以供查找,前半部分为自己总结的后半部分收集了飞扬青云的总结

qq_30360351的博客 8292

WinCC 7.5 读取 SQL server2016 中的表格数据

环境 win10 SQL Server 2016 WinCC V7.5 SP2 1 安装SQL Server 2016 2 选择服务器名称 .\WINCC 3 建数据库

skr? 7142

QT入门笔记-自定义控件封装 30

注意重载(信号和槽) 使用函数指针或者类型转换。

quaer的博客 669

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

17、QT布局类

Qt的布局系统提供了一个简单的和强有力的方式,来自动排列窗口子控件布局。QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。这些类都派生自QLayout,QLayout又派生自QObject(非QWidget),布局窗口自动地把子窗口按照它们被构造地顺序进行布局。要生成更复杂的布局,可以在其它布局里面嵌入另一个布局。 所有QWidget子类可以使用...

王木木 1875

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++ 函数重载(Overloading)与函数覆盖(Overriding)

继承:构建控件体系(QWidget → QPushButton → MyButton)多态:实现动态行为(paintEvent、data()、插件接口)最佳实践:虚函数 + override + 虚析构 + Q_OBJECT完整 Qt 项目 zip(含 .pro/CMake、.ui、资源、测试)QML 版本的多态示例(QAbstractListModel + ListView)插件系统完整实现(动态加载 .dll)命令模式、装饰器模式、适配器模式的 Qt 实现以下是对。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 1477

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: QT第16节课程笔记-引用
下一篇: QT第18-22节课程笔记 - 构造函数 - 拷贝构造函数完整笔记
上官可编程
博客等级 码龄14年 1398粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上官可编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值