新闻中心
c++ 运算符重载代码 c++ operator重载实例
运算符重载允许为类类型定义运算符行为,如复数类中重载+和

在C++中,运算符重载允许我们为自定义类型(如类)赋予标准运算符新的行为。通过重载,可以让对象像基本数据类型一样使用+、-、==等操作符,提升代码可读性和易用性。
什么是运算符重载
运算符重载是函数重载的一种形式,它使我们能重新定义已有运算符对类对象的操作方式。例如,两个复数对象可以通过+直接相加,而不是调用add()函数。
基本规则和限制
不是所有运算符都能被重载,比如 ::(作用域解析)、.(成员访问)、.*、?: 和 sizeof 不能重载。重载后的运算符不能改变优先级或结合性。
- 可以作为类的成员函数或全局函数重载
- 至少有一个操作数必须是用户自定义类型
- 重载函数应保持自然语义,避免滥用
实例:复数类的加法与输出重载
下面是一个完整的例子,展示如何重载 + 和
#include <iostream>
using namespace std;
<p>class Complex {
private:
double real, imag;
public:
Complex(double r = 0, double i = 0) : real(r), imag(i) {}</p><pre class='brush:php;toolbar:false;'>// 成员函数重载加法(也可用友元或全局函数)
Complex operator+(const Complex& other) const {
return Complex(real + other.real, imag + other.imag);
}
// 友元函数重载输出流,访问私有成员
friend ostream& operator<<(ostream& os, const Complex& c) {
os << c.real << (c.imag >= 0 ? " + " : " - ") << abs(c.imag) << "i";
return os;
}};
int main() { Complex c1(3, 4); Complex c2(1, -2); Complex c3 = c1 + c2;
cout << "c1 = " << c1 << endl; cout << "c2 = " << c2 << endl; cout << "c1 + c2 = " << c3 << endl; return 0;
}
输出结果:
简小派
简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。
123
查看详情
c1 = 3 + 4ic2 = 1 - 2i
c1 + c2 = 4 + 2i
重载赋值运算符 =
当类涉及动态资源管理时,必须自定义赋值运算符以防止浅拷贝问题:
class String {
private:
char* data;
public:
String(const char* str = nullptr) {
if (str) {
data = new char[strlen(str)+1];
strcpy(data, str);
} else {
data = new char[1];
data[0] = '\0';
}
}
<pre class='brush:php;toolbar:false;'>// 赋值运算符重载
String& operator=(const String& other) {
if (this == &other) return *this; // 自赋值检查
delete[] data; // 释放原内存
data = new char[strlen(other.data)+1];
strcpy(data, other.data);
return *this; // 支持链式赋值 a = b = c
}
~String() {
delete[] data;
}
friend ostream& operator<<(ostream& os, const String& s) {
os << s.data;
return os;
}};
重载下标运算符 []
常用于实现安全的数组类访问:
class IntArray {
private:
int* arr;
int size;
public:
IntArray(int s) : size(s) {
arr = new int[size];
}
<pre class='brush:php;toolbar:false;'>// 重载[],支持读写
int& operator[](int index) {
if (index < 0 || index >= size) {
throw out_of_range("Index out of bounds");
}
return arr[index];
}
~IntArray(
) { delete[] arr; }};
使用示例:
IntArray a(5);a[0] = 10;
cout
基本上就这些常见用法。掌握运算符重载能让自定义类型更直观、更接近内置类型的行为,但要合理使用,避免造成误解。
以上就是c++++ 运算符重载代码 c++ operator重载实例的详细内容,更多请关注其它相关文章!
# 是一个
# 惠州网站推广工作室招聘
# 辽宁电商网站品牌推广
# 泰州建设网站公司
# 清溪网站建设推广哪家好
# 营销策划包括推广费用吗
# 行业最火的关键词排名
# 长春怎么优化seo
# 教育网站营销推广
# 天津创新seo优化包括什么
# 铁岭seo排名必选
# 都能
# c++
# 如何实现
# 用友
# 有什么区别
# 如何使用
# 尼克
# 链式
# 自定义
# 运算符
# 代码可读性
# 作用域
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
邮政快递单号查询入口 邮政快递物流信息在线查询入口
解决J*aScript中重复选择项的确认对话框显示问题
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
163邮箱登录密码 163邮箱忘记密码找回
邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策
J*a最大堆Heapify方法修复:索引计算与边界条件深度解析
CSS图片焦点样式实现教程:理解与应用tabindex属性
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
TypeScript/J*aScript:高效查找数组中首个唯一ID对象
NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰
抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩
css滚动动画效果怎么实现_使用Animate.css滚动触发动画类
淘宝网网页版登录入口 淘宝官方网页版快捷登录
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
jQuery Mask 插件中实现电话号码固定前导零的教程
纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析
QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问
聚水潭ERP登录页面入口 聚水潭ERP官网登录界面
基于动态规划的房屋花卉种植最小成本算法详解
Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性
学习通网页版快速入口 学习通官网网页版直接打开
4399体育竞技小游戏_4399小游戏赛事入口
Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置
Python中如何避免重复条件判断:利用数据结构实现动态逻辑
PySpark中高效提取字符串右侧可变长度数字:使用regexp_extract
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
Angular中父组件异步更新子组件复选框状态的实践指南
深入理解Go语言中的指针类型:以*string为例
Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?
动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道
Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】
Angular中单选按钮的正确使用与常见陷阱解析
在Go Martini框架中高效服务动态生成图像的实践指南
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程
绝地鸭卫平a核爆刀流玩法攻略
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
KFC游戏互动怎么赢取优惠券_KFC线上游戏活动参与与优惠代码赢取教程
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全
J*aScript中向JSON对象添加新属性的正确姿势
Python Socket多播通信中指定源IP地址的实践指南
写好的html代码怎么运行出来_运行写好的html代码方法【教程】
文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】
J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程
React中useState与局部变量:理解组件状态管理与渲染机制
html两个JS只运行一个怎么办_让双JS在html中都运行方法【技巧】
J*aScript类型检查_j*ascript代码规范


2025-12-06
浏览次数:次
返回列表
) { delete[] arr; }