C++运算符重载教程_C++重载加减乘除与输入输出流


运算符重载允许为类类型定义+、-、*、/等操作,如Complex类通过成员函数重载加减乘除实现复数运算,输出输入流需以友元函数重载,保持操作直观且不改变原对象,提升代码可读性与易用性。

c++运算符重载教程_c++重载加减乘除与输入输出流

在C++中,运算符重载是一种允许我们为自定义类型(如类)赋予标准运算符新含义的机制。通过它,我们可以像使用基本数据类型一样自然地操作对象,比如让两个对象相加、比较或输入输出。下面以实现一个简单的复数类为例,演示如何重载加减乘除以及输入输出流运算符。

1. 重载加减乘除运算符

假设我们要设计一个Complex类来表示复数,包含实部和虚部。为了让两个复数对象能直接使用+-*/进行运算,需要重载这些运算符。

class Complex { private: double real, imag;

public: Complex(double r = 0, double i = 0) : real(r), imag(i) {}

<font color="#808080">// 重载加法</font>
Complex <strong>operator+</strong>(<font color="#0000FF">const</font> Complex& other) <font color="#0000FF">const</font> {
    <font color="#0000FF">return</font> Complex(real + other.real, imag + other.imag);
}

<font color="#808080">// 重载减法</font>
Complex <strong>operator-</strong>(<font color="#0000FF">const</font> Complex& other) <font color="#0000FF">const</font> {
    <font color="#0000FF">return</font> Complex(real - other.real, imag - other.imag);
}

<font color="#808080">// 重载乘法((a+bi)*(c+di) = (ac-bd)+(ad+bc)i)</font>
Complex <strong>operator*</strong>(<font color="#0000FF">const</font> Complex& other) <font color="#0000FF">const</font> {
    <font color="#0000FF">return</font> Complex(
        real * other.real - imag * other.imag,
        real * other.imag + imag * other.real
    );
}

<font color="#808080">// 重载除法(略复杂,需考虑分母模长)</font>
Complex <strong>operator/</strong>(<font color="#0000FF">const</font> Complex& other) <font color="#0000FF">const</font> {
    <font color="#0000FF">double</font> denominator = other.real * other.real + other.imag * other.imag;
    <font color="#0000FF">return</font> Complex(
        (real * other.real + imag * other.imag) / denominator,
        (imag * other.real - real * other.imag) / denominator
    );
}

<font color="#808080">// 提供访问函数</font>
<font color="#0000FF">void</font> print() <font color="#0000FF">const</font> {
    std::cout << "(" << real << " + " << imag << "i)";
}

};

上述代码中,所有二元运算符都作为成员函数实现,接收一个常量引用参数,返回新的Complex对象。这样可以链式调用,且不修改原对象。

2. 重载输入输出流运算符

输入输出流(>>)不能作为成员函数重载,因为它们的操作对象是std::ostreamstd::istream,而不是我们的类。因此必须定义为友元函数或普通全局函数。

friend std::ostream& operator(std::ostream& out, const Complex& c) { out return out; }

friend std::istream& operator>>(std::istream& in, Complex& c) { in >> c.real >> c.imag; return in; }

将这两个函数声明为Complex类的友元,以便访问其私有成员。使用方式如下:

Complex a(3, 4), b(1, 2); Complex c = a + b; std::cout

std::cin >> a; // 输入两个数字分别赋给 real 和 imag

3. 注意事项与建议

  • 保持语义一致:重载后的运算符行为应符合常规理解,比如+应该用于合并而非修改对象。
  • 优先使用成员函数重载对称运算符(如+-),但>>必须是全局函数。
  • 返回类型通常为值或引用,避免返回局部变量的引用。
  • 对于复合赋值运算符(如+=),推荐作为成员函数实现,并返回*this以支持链式赋值。

基本上就这些。掌握运算符重载后,可以让自定义类型更直观易用,提升代码可读性和封装性。关键在于合理设计接口,遵循直觉,不滥用特性。

以上就是C++运算符重载教程_C++重载加减乘除与输入输出流的详细内容,更多请关注其它相关文章!


# stream  # 包头百度seo代理  # 岳麓区电商营销推广  # 熊猫黑帽seo博客  # 沧州网络网站推广哪个好  # 郴州seo优化网  # 实体店铺营销与推广方案  # seo基础seo基础  # 桑蚕的营销与推广方案  # seo服务源码  # 抽象类  # 是一种  # 内存管理  # 如何使用  # 自定义  # 有什么  # 链式  # 如何实现  # 加减乘除  # 运算符  # 代码可读性  # 封装性  # c++  # 印尼咖啡推广中心网站 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 晓晓优选app支付宝绑定方法  微星主板BIOS怎么调整内存时序_内存参数手动优化BIOS设置教程  PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  Yandex世界探索 最新官方免登录入口全知道  支付宝如何解绑云闪付_支付宝与云闪付账户关联解除方法  在XML中嵌入二进制数据(如图片)的最佳实践是什么? Base64编码与解析注意事项  J*aScript调试技巧_性能分析与内存快照  虫虫助手如何更新游戏  济南公交卡手机充值指南  j*a中ArrayBlockingQueue的使用  优酷下载视频的清晰度怎么选_优酷缓存清晰度设置与选择指南  哔哩哔哩的|直播|间怎么送礼物_哔哩哔哩|直播|送礼操作指南  跨语言测试实践:使用Python Selenium测试现有J*a Web项目  告别繁琐SEO!如何使用SyliusSitemap插件自动化生成网站地图,提升搜索引擎排名  《i莞家》修改昵称方法  Apple Music无故扣费引质疑  花生壳内网映射新方案  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  三角洲行动2025年9月10日摩斯密码分享  德邦物流在线查询系统 德邦快递货物运输追踪  吃完饭就犯困是什么原因 餐后嗜睡如何缓解  《崩坏:星穹铁道》3.6版本异相仲裁打法及配队推荐  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测  抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系  谷歌邮箱官方入口链接 谷歌邮箱网页版电脑端快速登录  无人机考证官网 中国民航无人机考证官网登录入口  《oppo商城》维修服务位置  邦丰播放器频道搜索设置  163邮箱在线登录 163邮箱网页版在线入口  《幻兽帕鲁》手游帕鲁捕捉技巧分享  《procreate》绘制渐变效果教程  Composer如何使用composer-plugin-api开发自定义插件  怎样设置开机后自动运行某个程序_Windows启动文件夹与任务计划【自动化】  VS Code源代码管理(SCM)视图的进阶使用技巧  J*a中导出MySQL表为SQL脚本的两种方法  如何在mysql中设计餐饮点餐系统_mysql点餐系统项目实战  Win10怎么设置快速启动 Win10开启快速启动设置方法  视频转蓝光m2ts格式  C++怎么解决数值计算中的精度问题_C++浮点数误差与数值稳定性分析  sublime如何撤销关闭的标签页_sublime重新打开已关闭文件技巧  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  如何在CSS中使用伪类选择器_hover实现悬停效果  LINUX怎么查看显卡信息_LINUX查看GPU状态  嘀嗒顺风车如何开具电子发票  智云Q3和Q2有什么升级_智云Q3与Q2手持云台功能与性能对比分析  如何定制PrimeNG Sidebar的背景颜色  创客贴登录页面入口 创客贴网页版最新网址链接 

 2025-12-20

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.