C++ - 函数重载和运算符重载
1.函数重载
函数重载 (Overload)是 C++ 语言在C语言基础上新增的功能。函数重载能够在程序中使用多个同名的函数。是C++多态的特征体现。
通过函数重载来设计一系列的函数,它们完成相同或者相似的功能,但使用不同的参数列表。
函数重载的关键是函数的参数列表 (函数特征标)。如果两个函数的参数数目和类型相同,同时参数的排列顺序也相同,则它们的特征标相同,而与变量名无关。
C++允许定义名称相同的函数,条件是它们的特征标不同。如果参数数目、参数类型、排列顺序不同,则特征标也不同。
例:定义一组函数原型
void print(const char *str, int width); // #1
void print(double d, int width); // #2
void print(long l, int width); // #3
void print(int i ,int width); // #4
void print(const char *str); // #5
调用时:
print("hello",15);
print(10.0,2);
print(10L,2);
print(10,2);
print("hello");
函数重载条件
- 在相同的作用域下
- 参数的个数、类型、排列顺序不同。
- 函数的返回值不可以作为函数重载的条件。
C++有哪些函数不能重载
- 析构函数
析构函数不能重载 ,因为析构函数只能有一个,且不能带参数。析构函数是系统自动调用的,是没有参数表的。 - main函数不能重载
2.运算符重载
重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。
可重载的运算符:
不可重载的运算符:
- . 成员访问运算符
- ., -> 成员指针访问运算符
- :: 域运算符
- sizeof 长度运算符
- ?: 条件运算符
- # 预处理符号
下标运算符重载函数只能定义成员函数,其形式如下:
返回类型 类名::operator[ ] (形参){
??//函数体
}
注意:形参在此表示下标,C++ 规定只能有一个参数。
例 1:使用下标运算符重载函数的例子
#include<iostream>
using namespace std;
class Vector4{
private:
int v[4];
public:
Vector4(int a1,int a2,int a3,int a4){
v[0]=a1;v[1]=a2;v[2]=a3;v[3]=a4;
}
int &operator[](int bi); //声明下标运算符 [] 重载函数
};
int &Vector4::operator[](int bi){ //定义下标运算符 [] 重载函数
if(bi<0||bi>=4){ //数组的边界检查
cout<<"Bad subscript!\n";
exit(1);
}
return v[bi];
}
int main(){
Vector4 ve(0,1,2,3);
cout<<ve[2]<<endl; //ve[2] 相当于 ve.operator[](2)
ve[3]=ve[2];
cout<<ve[3]<<endl;
ve[2]=22;
cout<<ve[2];
return 0;
}
重载下标运算符“[ ]”时,返回一个 int 型的引用,可使重载的“[ ]”用在赋值语句的左边,因而在 main 函数中,ve[i] 可以出现在赋值运算符的任何一边,使编程更灵活。
参考:
[1]https://www.bilibili.com/video/BV1Rq4y1F77y/?spm_id_from=333.337.search-card.all.click&vd_source=7a4fcf1e79c6c978598c4f5c8e5dddf0
[2]http://t.csdnimg.cn/nANWh
[3]https://www.runoob.com/cplusplus/cpp-overloading.html
[4]https://blog.csdn.net/aaqian1/article/details/86440801
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!