当前位置: 首页 > news >正文

QT学习(五)C++函数重载

一、 函数重载

在同一个作用域内,可以声明几个功能类似的同名函数,
这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来 重载函数。
下面的实例中,同名函数 print() 被用于输出不同的数据类型
#include <iostream>
#include "string"
using namespace std;
class printData
{
public:void print(int i) {cout << "整数为: " << i << endl;}void print(double f) {cout << "浮点数为: " << f << endl;}void print(string str) {cout << "字符串为: " << str << endl;}
};
void print(int i) {cout << "整数为: " << i << endl;
}
void print(double f) {cout << "浮点数为: " << f << endl;
}
void print(string str) {cout << "字符串为: " << str << endl;
}void print(int i,double f) {cout << "整数为: " << i <<",浮点数为:"<<f<< endl;
}int main(void)
{print(5);print(500.13);print("hello world");print(1,23.2);printData pd;// 输出整数pd.print(5);// 输出浮点数pd.print(500.263);// 输出字符串string str = "Hello C++";pd.print(str);return 0;
}

二、 运算符重载

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 类,我们可以重载 + 运算符来实现两个点的加法。
#include <iostream>
using namespace std;
class Point {
public:int x, y;// 重载 + 运算符Point operator+(Point other) {Point res;res.x = x + other.x;res.y = y + other.y;return res;}
};
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; // 输出return 0;};

相关文章:

  • 双非本科准备秋招(22.1)—— 力扣二叉搜索树
  • Java面试题2024(Java面试八股文)
  • 简化版SpringMVC
  • 异地电脑文件夹共享吗?
  • 使用PDFBox实现pdf转其他图片格式
  • MYSQL笔记:约束条件
  • 【LangChain-04】利用权重和偏差跟踪和检查LangChain代理的提示
  • 国产三维剖面仪—MPAS-100相控参量阵浅地层剖面仪
  • C++单例模式详解
  • 部署tomcat
  • 这种学习单片机的顺序是否合理?
  • 牛客网SQL进阶127: 月总刷题数和日均刷题数
  • Kafka 使用手册
  • 获取视频帧图片
  • Spring Boot配置文件优先级
  • 【mysql】环境安装、服务启动、密码设置
  • create-react-app项目添加less配置
  • es6
  • Git 使用集
  • iOS 颜色设置看我就够了
  • iOS编译提示和导航提示
  • jquery ajax学习笔记
  • LeetCode29.两数相除 JavaScript
  • PAT A1017 优先队列
  • session共享问题解决方案
  • webpack4 一点通
  • 飞驰在Mesos的涡轮引擎上
  • 入手阿里云新服务器的部署NODE
  • 什么是Javascript函数节流?
  • 责任链模式的两种实现
  • raise 与 raise ... from 的区别
  • ​​​​​​​​​​​​​​Γ函数
  • "无招胜有招"nbsp;史上最全的互…
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #14vue3生成表单并跳转到外部地址的方式
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (ZT)出版业改革:该死的死,该生的生
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (全注解开发)学习Spring-MVC的第三天
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)EOS中账户、钱包和密钥的关系
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)iOS字体
  • *p++,*(p++),*++p,(*p)++区别?
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net6使用Sejil可视化日志
  • .NET开发不可不知、不可不用的辅助类(一)
  • .Net面试题4
  • .NET学习全景图
  • @JsonSerialize注解的使用
  • [ 蓝桥杯Web真题 ]-布局切换
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [Angular 基础] - 指令(directives)