一、函数重载的满足条件:
1.同一个作用域下
2.函数名称相同
3.函数参数类型不同,或者个数不同,或者顺序不同
void func(){//无参
count<<"调用了func的函数"<<endl;
}
void func(int a){//一个整型参数
count<<"调用了func(int a)的函数"<<endl;
}
void func(double a){//一个double参数
count<<"调用了func(double a)的函数"<<endl;
}
void func(int a,double b){//双参
count<<"调用了func(int a,double b)的函数"<<endl;
}
//注意事项
//函数的返回值不可以作为函数重载的条件
//int func(double a,double b){
// count<<"调用了func(double a,double b)的函数"<<endl;
//}
int main(){
func(10);
func();
func(3,6.66);
}
二、函数重载的注意事项
//1、引用作为重载条件
void func(int &a){//数据的引用,在栈上或者堆区,非常量区
cout<<"func(int &a)调用"<<endl;
}
void func(const int &a){//可直接调取常量
cout<<"func(const int &a)调用"<<endl;
}
//2、函数重载碰到函数默认参数
void func2(int a,int b=10){
cout<<"func2(int a,int b=10)调用"<<endl;
}
void func2(int a){
cout<<"func2(int a)调用"<<endl;
}
void main(){
int a=10;
func(a);//调用无const
func(10);//调用有const
// func2(10);//碰到默认参数产生歧义,需要避免
}
1.在重载某运算符时,若运算符函数的形参表中没有参数,则可能的情况有:
该参数是一个单目运算符;该运算符有一个隐含的参数this;该运算符函数是类的成员函数。
三、对象之间的运算符重载
定义运算符重载函数,形参列表取地址
bool operator>(String& string1, String& string2) {
if (strcmp(string1.p, string2.p) > 0) {
return true;
}
else {
return false;
}
}
在主函数调用的时候,(string1 > string2)
是一个对象之间的运算符重载。它表示比较 string1
和 string2
两个对象的大小关系。具体来说,它调用了类 String
内部重载的大于运算符 operator>
来比较两个字符串的字典序。
int main() {
String string1((char *)"Hello"), string2((char *)"Book");
cout << (string1 > string2) << endl;
return 0;
}