新闻中心

c++ 运算符重载代码 c++ operator重载实例

2025-12-06
浏览次数:
返回列表
运算符重载允许为类类型定义运算符行为,如复数类中重载+和

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 + 4i
c2 = 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代码规范 

搜索