函数重载与参数缺省

题目描述

下面这段代码利用函数重载实现了multiply函数:

#include <iostream>
using std::cin, std::cout, std::endl;
int multiply(int x, int y) {
    return x * y;
}a
int multiply(int x, int y, int z) {
    return x * y * z;
}
int multiply(int x, int y, int z, int a) {
    return x * y * z * a;
}
int main() {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    cout << multiply(a, b) << endl;
    cout << multiply(a, b, c) << endl;
    cout << multiply(a, b, c, d) << endl;
}  

请完成如下代码填空,在效果不发生改变的情况下将multiply函数修改为缺省参数的版本。

关于输入

共一行,为空格分隔的四个整数a、b、c、d,其积在int范围内。

关于输出

共三行。

第一行为 a * b 的结果;

第二行为 a * b * c 的结果;

第三行为 a * b * c * d 的结果。

参考答案

#include <iostream>
#include <utility>
using std::cin, std::cout, std::endl;
int multiply(int a, int b, int c = 1, int d = 1) {
    return a * b * c * d;
}
int main() {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    cout << multiply(a, b) << endl;
    cout << multiply(a, b, c) << endl;
    cout << multiply(a, b, c, d) << endl;
}

// 下一行代码用于确保你未使用函数重载,不用管
static_assert(std::is_function_v<decltype(multiply)>);