博客
关于我
15.C++-操作符重载、并实现复数类
阅读量:446 次
发布时间:2019-03-06

本文共 1558 字,大约阅读时间需要 5 分钟。

函数重载与操作符重载的深入理解

函数重载

函数重载是C++中的一大特性,它允许在同一个作用域内定义多个名相同的函数。这些函数通过参数的不同来区分,编译器会根据函数调用的参数依次选择合适的函数执行。

函数重载的本质

  • 相互独立的不同函数:每个重载函数都是独立的,具有不同的参数定义。
  • 函数名和参数:函数的唯一标识由其名和参数类型组成。
  • 无法直接通过函数名获取入口地址:函数重载依赖于编译器的支持,无法通过符号链接直接获取函数入口地址。
  • 必须在同一个作用域内:函数重载必须在同一个作用域内进行。

类中的函数重载

在类中,函数重载可以应用于静态成员函数和普通成员函数,但全局函数和成员函数不能构成重载关系。

操作符重载

操作符重载是C++中的一大优势,它允许我们为用户定义类操作符,使得对象能够像普通变量一样进行运算。

操作符重载的定义

操作符重载通过在函数前使用operator关键字定义。定义方式如下:

[返回类型] operator [操作符] ([参数]) {
// 函数体
}

操作符重载的实现方式

  • 全局操作符重载函数:这些函数不依赖于任何对象,直接处理操作符的参数。
  • 成员操作符重载函数:这些函数属于类的成员,操作符执行时会传入this指针。

注意事项

  • 操作符重载不能改变原操作符的优先级:必须遵循运算符的正常优先级。
  • 操作数的个数不能改变:操作符重载函数的参数个数必须与原操作符一致。
  • 参数应为const class_name &:以避免产生临时对象。
  • 一元操作符:某些操作符(如赋值、下标等)必须为成员函数,需要有对象支持。

常见的二元操作符

  • 加法+
  • 逻辑或||
  • 逗号`,``
  • 赋值=
  • 成员访问箭头->

操作符重载的应用

以加法+为例:

Test t3 = t1 + t2; // 调用的是全局操作符重载函数
Test t3 = t1.operator+(t2); // 调用的是成员操作符重载函数

复数类的操作符重载

复数类需要实现以下运算:

  • 加法+:实部和虚部分别相加。
  • 减法-:实部和虚部分别相减。
  • 乘法*:使用复数乘法公式。
  • 除法/:使用复数除法公式。
  • 比较操作符==!=:比较实部和虚部。
  • 赋值操作符=:复数的赋值操作。
  • 求模成员函数:计算复数的模长。

复数类的实现

class Complex {
private:
double a;
double b;
public:
Complex(int a = 0, int b = 0) {}
Complex operator+(const Complex &t) {
Complex ret;
ret.a = a + t.a;
ret.b = b + t.b;
return ret;
}
// 其他操作符重载函数...
}

测试与验证

编写测试文件验证复数类的功能:

#include "stdio.h"
#include "Complex.h"
int main() {
Complex t1(1, 3);
Complex t2(2, 6);
Complex t3 = t1 + t2;
printf("t3.a = %.2f, t3.b = %.2f\n", t3.getA(), t3.getB());
printf("t3的模 = %.2f\n", t3.getModulus());
return 0;
}

运行结果

t3.a = 3.00, t3.b = 9.00
t3的模 = 9.49

通过这些实例可以看出,操作符重载在复数类中的应用使得复数运算变得自然且直观。

转载地址:http://nriyz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现Euclidean GCD欧几里得最大公约数算法(附完整源码)
查看>>
Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
查看>>
Objective-C实现euler method欧拉法算法(附完整源码)
查看>>
Objective-C实现eulerianPath欧拉路径算法(附完整源码)
查看>>
Objective-C实现eval函数功能(附完整源码)
查看>>
Objective-C实现Exceeding words超词(差距是ascii码的距离) 算法(附完整源码)
查看>>
Objective-C实现extended euclidean algorithm扩展欧几里得算法(附完整源码)
查看>>
Objective-C实现Factorial digit sum阶乘数字和算法(附完整源码)
查看>>
Objective-C实现factorial iterative阶乘迭代算法(附完整源码)
查看>>
Objective-C实现factorial recursive阶乘递归算法(附完整源码)
查看>>
Objective-C实现FigurateNumber垛积数算法(附完整源码)
查看>>
Objective-C实现Gale-Shapley盖尔-沙普利算法(附完整源码)
查看>>
Objective-C实现hamiltonianCycle哈密尔顿图算法(附完整源码)
查看>>
Objective-C实现hamming numbers汉明数算法(附完整源码)
查看>>
Objective-C实现hanning 窗(附完整源码)
查看>>
Objective-C实现hanoiTower汉诺塔算法(附完整源码)
查看>>
Objective-C实现hardy ramanujana定理算法(附完整源码)
查看>>
Objective-C实现highest response ratio next高响应比优先调度算法(附完整源码)
查看>>
Objective-C实现hill climbing爬山法用来寻找函数的最大值算法(附完整源码)
查看>>
Objective-C实现hornerMethod霍纳法算法(附完整源码)
查看>>