这里我们介绍一个后边会学到的知识,运算符重载。
是什么意思呢?指我们可以用 + 号,做到 - 号的操作,可以用!=实现==的操作。不过我们平时不这样做,这样做属于滥用运算符重载了。我们一般是将其用于自定义数据类型的运算,比如我们有两个对象,想将两个对象里相同的那个属性值相加。若是分开加的话,当我们的对象太多时候,想两两相加不太显示,就需要用到运算符重载了
利用函数重载可以设计一系列函数——他们完成相同的工作,但使用不同的参数列表。
函数重载:
条件1:函数名称相同
条件2:函数参数类型不同 或者 函数参数个数不同 或者 函数参数的顺序不同
函数参数列表——也成为函数特征标
#include<iostream>
using namespace std;
//引用作为重载条件
void func1(int& a) {
cout << "func1(int& a)的调用" << endl;
}
void func1(const int& a) { //const int &a = 10;编译器优化,创建一块空间存放他
cout << "func1(const int& a)的调用" << endl;
}
//这个重载与 const int& a 是等价的
//void func1(int a) {
// cout << "func1(int a)的调用" << endl;
//}
int main() {
int a = 10;
func1(a); //此时会调用(int& a),因为a是一个指向int型数据的变量
func1(10); //此时会调用(const int& a),因为10是一个无法改变的常量
return 0;
}
1.此时函数重载,名称都为func1,需要注意加const和不加const的区别
2.参数为10时候,不调用函数func1(int& a),因为引用本质是指针常量,指向不能改,但是指向内存空间的值可以修改,因此不能被赋常数。
但是当参数变为 const int& a 后,其指向和值都不能修改,因此可以赋予常量10,此时编译器会进行优化,为10创建一块空间存放他。这也是和 int a 等价的原因
此处若 func1(int x) 和 func1(int &x),这样的代码是不允许的。或许你认为可以在此处使用函数重载,特征量看起来不同。
然而,若cout << func1(x); 则会出现二义性
#include<iostream>
using namespace std;
void func2(int a,int b = 20) {
cout << "func2(int a, int b = 20)的调用" << endl;
}
void func2(int a) {
cout << "func2(int a)的调用" << endl;
}
int main() {
int a = 10;
func2(10);
return 0;
}
2.当函数重载遇到默认参数时候,如代码示例,此时调用函数func2(10); 两个重载函数都可选择,有二义性,因此编译器不允许这种情况出现。若调用函数func(10,20),这时候没问题,使用有默认参数的那个函数。
以上就是今天要讲的内容,本文介绍了函数重载相关知识点
如果帮到了你,可以点一个关注,后续学习笔记将每日更新哦。
也可以留下一个赞,你的赞是笔者更新的动力
如果文章有用的话,也可以收藏起来,代表自己学习过的痕迹,这块知识点遗忘时候可以方便查看