运算符重载允许为类类型定义+、-、*、/等操作,如Complex类通过成员函数重载加减乘除实现复数运算,输出输入流需以友元函数重载,保持操作直观且不改变原对象,提升代码可读性与易用性。
在C++中,运算符重载是一种允许我们为自定义类型(如类)赋予标准运算符新含义的机制。通过它,我们可以像使用基本数据类型一样自然地操作对象,比如让两个对象相加、比较或输入输出。下面以实现一个简单的复数类为例,演示如何重载加减乘除以及输入输出流运算符。
假设我们要设计一个Complex类来表示复数,包含实部和虚部。为了让两个复数对象能直接使用+、-、*、/进行运算,需要重载这些运算符。
class Complex {
private:
double re
al, imag;
public: Complex(double r = 0, double i = 0) : real(r), imag(i) {}
// 重载加法
Complex operator+(const Complex& other) const {
return Complex(real + other.real, imag + other.imag);
}
// 重载减法
Complex operator-(const Complex& other) const {
return Complex(real - other.real, imag - other.imag);
}
// 重载乘法((a+bi)*(c+di) = (ac-bd)+(ad+bc)i)
Complex operator*(const Complex& other) const {
return Complex(
real * other.real - imag * other.imag,
real * other.imag + imag * other.real
);
}
// 重载除法(略复杂,需考虑分母模长)
Complex operator/(const Complex& other) const {
double denominator = other.real * other.real + other.imag * other.imag;
return Complex(
(real * other.real + imag * other.imag) / denominator,
(imag * other.real - real * other.imag) / denominator
);
}
// 提供访问函数
void print() const {
std::cout << "(" << real << " + " << imag << "i)";
}};
上述代码中,所有二元运算符都作为成员函数实现,接收一个常量引用参数,返回新的Complex对象。这样可以链式调用,且不修改原对象。
输入输出流( 和 >>)不能作为成员函数重载,因为它们的操作对象是std::ostream或std::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
基本上就这些。掌握运算符重载后,可以让自定义类型更直观易用,提升代码可读性和封装性。关键在于合理设计接口,遵循直觉,不滥用特性。
# c++
# stream
# 封装性
# 代码可读性
# 数据类型
# 常量
# 运算符
# 赋值运算符
# 封装
# 成员函数
# const
# 局部变量
# double
# cin
# 接口
# class
# public
# private
# 引用参数
# 函数重载
# 运算符重载
# operator
# 对象
# this
# 链式
# 加减乘除
# 自定义
# 是一种
# 我们可以
# 这两个
# 为例
# 而非
# 易用
相关文章:
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
已有域名建站全流程解析:网站搭建步骤与建站工具选择
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
制作网页的网站有哪些,电脑上怎么做网页?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在景安服务器上快速搭建个人网站?
怀化网站制作公司,怀化新生儿上户网上办理流程?
建站主机如何选?性能与价格怎样平衡?
建站之星如何开启自定义404页面避免用户流失?
建站之星如何实现五合一智能建站与营销推广?
如何确保FTP站点访问权限与数据传输安全?
如何快速生成专业多端适配建站电话?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
网站设计制作企业有哪些,抖音官网主页怎么设置?
如何在腾讯云服务器快速搭建个人网站?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
如何注册花生壳免费域名并搭建个人网站?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
建站之星2.7模板:企业网站建设与h5定制设计专题
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
建站之星多图banner生成与模板自定义指南
制作宣传网站的软件,小红书可以宣传网站吗?
网站制作话术技巧,网站推广做的好怎么话术?
青岛网站建设如何选择本地服务器?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
红河网站制作公司,红河事业单位身份证如何上传?
专业网站建设制作报价,网页设计制作要考什么证?
建站之星代理商如何保障技术支持与售后服务?
定制建站如何定义?其核心优势是什么?
建站之星安装后如何自定义网站颜色与字体?
微课制作网站有哪些,微课网怎么进?
如何在腾讯云服务器上快速搭建个人网站?
为什么Go需要go mod文件_Go go mod文件作用说明
C#如何序列化对象为XML XmlSerializer用法
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
香港服务器租用费用高吗?如何避免常见误区?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
网站制作说明怎么写,简述网页设计的流程并说明原因?
如何解决VPS建站LNMP环境配置常见问题?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
如何通过二级域名建站提升品牌影响力?
广州建站公司哪家好?十大优质服务商推荐
如何通过智能用户系统一键生成高效建站方案?
如何在建站之星网店版论坛获取技术支持?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
香港服务器如何优化才能显著提升网站加载速度?
如何将凡科建站内容保存为本地文件?
*请认真填写需求信息,我们会在24小时内与您取得联系。