
C++编程练习3:复数类运算符重载实现

在C++编程中,运算符重载是一种允许赋予C++内置运算符新的意义的技术,使得这些运算符能够用于自定义类的对象。本练习要求实现一个复数类(Complex),并在该类中重载一系列的运算符。复数是由实部和虚部组成的数,通常表示为 a + bi 的形式,其中 a 是实部,b 是虚部,i 是虚数单位,满足 i² = -1。
首先,我们需要定义一个复数类Complex,并在其中实现以下成员函数和运算符重载:
1. 构造函数:允许用户创建具有特定实部和虚部的复数对象。
2. 析构函数:执行清理工作,如释放动态分配的内存(在这个例子中可能不是必须的,因为使用的是内置类型)。
3. 拷贝构造函数:创建一个与现有复数对象完全相同的新对象。
4. operator=:实现对象的赋值操作。
5. operator*:重载乘法运算符,用于计算两个复数的乘积。
6. operator+:重载加法运算符,用于计算两个复数的和。
7. operator-:重载减法运算符,用于计算两个复数的差。
8. operator/:重载除法运算符,用于计算两个复数的商。
9. operator==:重载等于运算符,用于比较两个复数是否相等。
10. operator!=:重载不等于运算符,用于比较两个复数是否不相等。
以下是一个可能的Complex类实现的示例:
```cpp
#include <iostream>
class Complex {
public:
float real; // 实部
float imag; // 虚部
// 构造函数
Complex(float r = 0.0, float i = 0.0) : real(r), imag(i) {}
// 析构函数
~Complex() {}
// 拷贝构造函数
Complex(const Complex &c) : real(c.real), imag(c.imag) {}
// operator=
Complex &operator=(const Complex &c) {
real = c.real;
imag = c.imag;
return *this;
}
// operator+
Complex operator+(const Complex &c) const {
return Complex(real + c.real, imag + c.imag);
}
// operator-
Complex operator-(const Complex &c) const {
return Complex(real - c.real, imag - c.imag);
}
// operator*
Complex operator*(const Complex &c) const {
float newReal = real * c.real - imag * c.imag;
float newImag = real * c.imag + imag * c.real;
return Complex(newReal, newImag);
}
// operator/
Complex operator/(const Complex &c) const {
float denominator = c.real * c.real + c.imag * c.imag;
float newReal = (real * c.real + imag * c.imag) / denominator;
float newImag = (imag * c.real - real * c.imag) / denominator;
return Complex(newReal, newImag);
}
// operator==
bool operator==(const Complex &c) const {
return (real == c.real) && (imag == c.imag);
}
// operator!=
bool operator!=(const Complex &c) const {
return !(*this == c);
}
// 输出复数(用于测试)
friend std::ostream& operator<<(std::ostream &out, const Complex &c);
};
// 实现输出运算符
std::ostream& operator<<(std::ostream &out, const Complex &c) {
out << "(" << c.real << "," << c.imag << "i)";
return out;
}
int main() {
Complex c1(4.0, 3.0), c2(2.0, -1.0), c3;
std::cout << "c1 = " << c1 << std::endl;
std::cout << "c2 = " << c2 << std::endl;
// 测试运算符重载
c3 = c1 + c2;
std::cout << "c1 + c2 = " << c3 << std::endl;
c3 = c1 - c2;
std::cout << "c1 - c2 = " << c3 << std::endl;
c3 = c1 * c2;
std::cout << "c1 * c2 = " << c3 << std::endl;
c3 = c1 / c2;
std::cout << "c1 / c2 = " << c3 << std::endl;
// 测试相等性运算符
std::cout << "c1 == c2 ? " << (c1 == c2 ? "true" : "false") << std::endl;
std::cout << "c1 != c2 ? " << (c1 != c2 ? "true" : "false") << std::endl;
return 0;
}
```
在上述代码中,我们定义了一个名为Complex的类,该类有三个成员变量:两个float类型的实部(real)和虚部(imag),以及一个构造函数。我们还定义了拷贝构造函数、赋值运算符、加法、减法、乘法、除法、相等性和不等性运算符。所有这些运算符都被重载以便它们可以作用于Complex对象。
main函数中,我们创建了两个Complex对象,并演示了如何使用这些运算符来执行复数的基本运算。我们还使用标准输出流运算符<<来打印复数对象的值,这需要在类定义外部实现友元函数。
通过这个练习,我们不仅练习了运算符的重载,也加深了对面向对象编程、类的设计和实现以及C++语言特性的理解。
相关推荐






资源评论

俞林鑫
2025.06.09
该文档适合那些已经有一定编程基础,希望进一步提高编程技能的读者。😀

被要求改名字
2025.05.18
通过这个文档的学习,你可以掌握如何创建复数类并进行基本的算术运算。

书看不完了
2025.04.25
文档中的复数类实现操作十分详细,有助于理解复杂数据结构的构建和使用。

巧笑倩兮Evelina
2025.03.13
对于想要深入理解并练习C++中运算符重载的朋友们,这个文档将是一个很好的参考资源。☔️

创业青年骁哥
2025.02.21
利用复数类练习运算符重载是一个很好的编程练习,有助于巩固和深化对C++的理解。

王向庄
2025.01.12
这个文档详细地介绍了如何实现一个复数类以及如何练习运算符的重载,内容全面且实用。

lycdweh1qaz
- 粉丝: 0
最新资源
- Protel 99 SE教程第五章:AVI格式视频学习指南
- JAVA开发者的无线网络扫描利器:jWlanScan库
- 深入理解控件开发:编辑器、右击菜单、syslist与systoolbar
- xdoclet-1.2.3源码包深度解析
- 联通彩信开发指南:掌握MM7API的使用
- MyTrain: 城市间列车时刻查询打印系统
- ASP.NET多层架构在Vs2005中的实践演示
- 2008年暑期实践:C/S水费系统设计与反思
- 掌握LabWindows CVI:实用教程与经典示例剖析
- ZIP与Java类文件内容搜索利器:Search and Replace
- XML基础教程PPT完整解析指南
- 孙鑫C++全套教程与源码,PPT讲义,速学速用
- VB.NET实现的学生成绩管理系统案例
- 全面深入学习WINCE驱动开发
- BCB帮助文档:新手入门与价值利用指南
- AIX使用指南:全面详细的技术资料
- C#程序开发:压缩包子菜单功能解析
- 安徽财经大学初级会计学课件精要
- 提升网页设计效率的CSS菜单生成工具
- 现代电子商务发展及对物流的影响
- 临沂市场信息网 v4.0源码发布:全功能市场信息平台
- Websharp2.0:.Net平台企业应用软件框架
- 《网络工程设计与实践》:高校网络基础课程教材
- Struts实现二级联动与MySQL连接池的代码教程