第六章、C++的函数

C++ 语言的函数在 C 语言的基础上扩充了一些功能。这些功能包括函数的缺省参数、函数重载等。

1. 函数的缺省参数

在 C 语言中,如果我们要定义函数来实现两个整数、三个整数和四个整数相加并返回这些数的和,一般我们要写三个函数,如下所示:

int myadd2(int a, int b) {
    return a + b;
}

int myadd3(int a, int b, int c) {
    return a + b + c;
}

int myadd4(int a, int b, int c, int d) {
    return a + b + c + d;
}

在调用时也要根据名字依次调用,如:myadd2(1,2)myadd3(10, 20, 30)myadd4(100, 200, 300, 400)

C++ 使用缺省参数的语法可以将上述问题简单的解决,这个解决方法就是 C++ 新增的语法:函数的缺省参数(default argument)。

函数的缺省参数 允许函数在声明时给定缺省参数,当函数调用没有给定足够的实际参数时,形式参数将使用缺省参数来代替实际参数对函数进行调用。

语法

返回类型 函数名/或成员函数名(形参类型 形参名1[ = 缺省值1],形参类型 形参名2[ = 缺省值2], ...) {
    ...
}

示例

// filename: default_args.cpp
#include <iostream>

using namespace std;

int myadd(int a, int b, int c=0, int d=0) {
    return a + b + c + d;
}

int main(int argc, char * argv[]) {
    cout << myadd(1, 2) << endl;
    cout << myadd(10, 20, 30) << endl;
    cout << myadd(100, 200, 300, 400) << endl;

    return 0;
}

编译和运行结果如下

weimz@mzstudio:~$ g++ -o default_args default_args.cpp
weimz@mzstudio:~$ ./default_args
3
60
1000

说明

缺省参数必须自右至左依次存在。如果一个函数的形式参数有缺省参数,则其右侧的所有形式参数都必须有缺省参数。

如下列写法就是错误的。

int myadd(int a, int b=100, int c, int d=0) {
    return a + b + c + d;
}

因为 形参 b 有缺省参数,而 形参 c 却没有缺省参数,则编译会报错。

练习

写一个函数 mymul 来实现两个整数、三个整数、四个相乘,并返回相乘后的乘积。

如:

int mymul(...) {
    ...
}

请完善上述代码。