C++中的缺省函数和函数重载

mac2024-05-26  38

一,缺省函数

1.概念:缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
void TestFunc(int a = 10)//函数参数a默认是10 { cout << a << enl; } int main() { TestFunc();//a=10 TestFunc(100);//a=100 return 0; }
2.缺省函数的分类

全缺省参数

void TestFunc1(int a = 10,int b=20,int c=30) { cout << a <<" "<<b<<" "<<c<< endl; } int main() { TestFunc1(); TestFunc1(10,20,30); return 0; }

半缺省参数 //规则:只能从右往左依次给默认参数,不能间隔着给。

void TestFunc2(int a, int b=20, int c = 30) { cout << a << " " << b << " " << c << endl; } int main() { TestFunc1(); TestFunc1(10, 30); return 0; }
3.缺省参数一般放在函数声明位置比较好(定义和声明位置都可以放),这样用户在使用函数的时候就知道有默认参数
void TestFunc(int a = 20);//声明 void TestFunc(int a)//定义 { cout<<a<<endl; } int main() { TestFunc(10); return 0; }
4.C语言和C++函数的一些小区别。

C语言中函数没有指定返回类型,会默认是int类型。 C++中则必须指定函数返回类型 C语言中函数没有参数,可以传递实参。 C++中函数没有参数,不可以传递实参,指定为void。 C语言不支持设置缺省参数,C++则可以。

二.函数重载

在C语言中,我们如果想写两数相加,可能会这样写:

int Add(int left, int right) { return left + right; }

但是,此时要计算两个double类型的数据相加的和,又不得不重新再这样写:

double Addd(double left, double right) { return left + right; }

如果想计算其他类型的数据相加,还必须得再更改类型和函数名,写函数方法。。。因为函数名如果相同,编译器会报错,C语言不允许同一文件中函数名相同,这样就会很麻烦。

C++中提出了函数重载这一概念,方便了我们处理实现功能类似,数据类型不同的问题。

函数重载:C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,与返回值类型是否相同无关(仅仅是返回值不同,不能构成函数重载)。

比如上面那个问题就可以这样解决:

int Add(int left, int right) { return left + right; } double Add(double left, double right) { return left + right; } int main() { Add(1, 2);//参数类型的推演:int Add(1.2, 3.2);//参数类型的推演:double return 0; }

这样就形成了函数重载。

2.C++支持函数重载的深层原因。

C语言对函数名字的修饰只是在名字前加了个_(_Add)。 C++对函数名字的修饰:// int -> ?Add@@YAHHH@Z           // double -> ?Add@@YANNN@Z 正是因为C++保证函数名字不同,才能进行函数重载。

3.使用函数重载应注意:

千万要注意不要让编译器左右为难

int Add(int a, int b,int c=10) { return a + b+ c; } int Add(int a, int b) { return a + b; } int main() { Add(1, 2);//编译器不知道该调用哪一个函数 Add(1,2,3);//正确 return 0; }
4.extern “C” 加在函数前面,表示用C语言方式编译此函数。
extern "C" int Add(int left, int right) { return left + right; }
最新回复(0)