C++中新增了重载功能,重载分为两部分,函数重载和运算符重载。
1. 函数重载
在C语言编程中,我们经常遇到一组函数完成同一类功能的情况。比如:
int MaxInt(int a, int b);long MaxLong(long a, long b);float MaxFloat(float a, float b);
这三个函数的功能都是从a和b中找出大的那个输出。每次遇到这种问题,最麻烦的就是要想三个不同的函数名去命名。如今,在C++中,我们可以让它们共用同一个函数名。
int Max(int a, int b);long Max(long a, long b);float Max(float a, float b);
我们来看看它们是如何工作的:
#include <iostream>using namespace std;int Max(int a, int b){ cout << "-> Call Max Int" << endl; return a > b ? a : b; }long Max(long a, long b){ cout << "-> Call Max Long" << endl; return a > b ? a : b; }float Max(float a, float b){ cout << "-> Call Max Float" << endl; return a > b ? a : b; }int main(){ int nA = 1; int nB = 2; float fA = 3.0f; float fB = 4.0f; long lA = 10; long lB = 11; cout << "Max(nA, nB) : " << Max(nA, nB) << endl; cout << "Max(fA, fB) : " << Max(fA, fB) << endl; cout << "Max(lA, lB) : " << Max(lA, lB) << endl; return 0; }
执行结果:
在C++中,允许在同一个作用域中使用同一个函数名定义多个函数,只要这些函数的参数个数或参数类型不同即可。
函数重载注意
可以利用参数个数区分
可以利用参数类型区分
不能利用返回值区分
在C++内部,有种能够唯一标识函数的东西叫做函数签名。函数签名与函数名、参数个数和参数类型有着紧密的关系,唯独与返回值无关。道理其实很简单,在调用函数时,如果不接收返回值,比如:
int Fun() { return 0; } long Fun() { return 1; } void main() { Fun(); }
main函数中,我们如何通过返回值判断它调用的是哪个函数呢?如果我们都判断不出,那么计算机如何能够判断的出呢。
2. 运算符重载
在C语言到C++(1) - 基本变化中,我们介绍了cin
和cout
的使用,其中会用到<<
和>>
。在C语言中,这两个是位运算符,而到了C++中,它们又增加了表示stream的功能,这就是运算符重载。
我们举一个常用的例子,在C语言中,比较运算符只能比较基本数据类型,如:
int a = 0;int b = 1;if(a < b) { // Do something}
但如果我们需要比较两个结构体的大小呢?看看这段代码:
#include <iostream>using namespace std;typedef struct _tagNode{ int m_x; int m_y; }Node;bool operator < (const Node& node1, const Node& node2) { if ((node1.m_x + node1.m_y) < (node2.m_x + node2.m_y)) { return true; } else { return false; } }int main(){ Node n1 = { 1, 2 }; Node n2 = { 3, 4 }; if (n1 < n2) { cout << "n1 is min" << endl; } else { cout << "n2 is min" << endl; } return 0; }
n1和n2是两个Node类型的结构体,我们想要用“<”比较它们,就需要通过运算符重载的方式定义一个“<”的新功能。
bool operator < (const Node& node1, const Node& node2)
在这个函数的定义中,制定了一个比较两个Node数据类型的规则,就是比较它们两个成员变量之和。程序的执行结果如下:
作者:天花板
链接:https://www.jianshu.com/p/45752a292c2b
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦