|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼老师要求写一个calc的函数
当传入1个参数的时候,返回它的平方
2个的时候,返回它俩相乘
3个的时候,返回它们3个相加
然后我写的代码如下:
- #include <iostream>
- #include <math.h>
- double calc(double a1, double a2, double a3);
- int main(int argc, const char *argv[], const char *envp[])
- {
- double a1, a2, a3;
- int judge;
- double answer;
- std::cout << "请问要输入几个数? " << std::endl;
- std::cin >> judge;
- switch(judge)
- {
- case 1:
- {
- std::cin >> a1;
- answer = calc(a1);
- break;
- }
- case 2:
- {
- std::cin >> a1 >> a2;
- answer = calc(a1, a2);
- break;
- }
- case 3:
- {
- std::cin >> a1 >> a2 >> a3;
- answer = calc(a1, a2, a3);
- break;
- }
- default :
- {
- std::cout << "输入错误, 请重试! " << std::endl;
- break;
- }
- }
- std::cout << "计算后的值为: " << answer << std::endl;
- system("pause");
- return 0;
- }
- double calc(double a1)
- {
- return pow(a1, 2);
- }
- double calc(double a1, double a2)
- {
- return a1 * a2;
- }
- double calc(double a1, double a2, double a3)
- {
- return a1 + a2 + a3;
- }
复制代码
编译的时候报错
- test02.cpp: In function 'int main(int, const char**, const char**)':
- test02.cpp:28:26: error: too few arguments to function 'double calc(double, double, double)'
- 28 | answer = calc(a1);
- | ~~~~^~~~
- test02.cpp:12:8: note: declared here
- 12 | double calc(double a1, double a2, double a3);
- | ^~~~
- test02.cpp:34:26: error: too few arguments to function 'double calc(double, double, double)'
- 34 | answer = calc(a1, a2);
- | ~~~~^~~~~~~~
- test02.cpp:12:8: note: declared here
- 12 | double calc(double a1, double a2, double a3);
- | ^~~~
复制代码
它的意思是说我声明函数的时候是3个参数,然后前两次调用都是1个,2个参数,不够。但是小甲鱼老师有讲说,可以根据参数的数量、类型进行重载,所以是可以根据1~3个参数来重载的呀。搞不懂了,百度说什么的都有,问问各位大神了。
你的代码在大致上的逻辑是正确的,但是有一个小错误导致你不能正确编译。在你的代码中,你提前声明了 calc 函数是带有三个参数的,然后在后面你实现了三个参数的版本,但是你没有为只有一个或者两个参数的情况提前声明函数。
你需要在你的代码开始处声明所有的重载版本,而不仅仅是三个参数的版本,这样你的代码就能正确编译了。
修改后的代码如下:
- #include <iostream>
- #include <math.h>
- double calc(double a1); // 声明只有一个参数的版本
- double calc(double a1, double a2); // 声明有两个参数的版本
- double calc(double a1, double a2, double a3); // 声明有三个参数的版本
- int main(int argc, const char *argv[], const char *envp[])
- {
- double a1, a2, a3;
- int judge;
- double answer;
- std::cout << "请问要输入几个数? " << std::endl;
- std::cin >> judge;
- switch(judge)
- {
- case 1:
- {
- std::cin >> a1;
- answer = calc(a1);
- break;
- }
- case 2:
- {
- std::cin >> a1 >> a2;
- answer = calc(a1, a2);
- break;
- }
- case 3:
- {
- std::cin >> a1 >> a2 >> a3;
- answer = calc(a1, a2, a3);
- break;
- }
- default :
- {
- std::cout << "输入错误, 请重试! " << std::endl;
- break;
- }
- }
- std::cout << "计算后的值为: " << answer << std::endl;
- system("pause");
- return 0;
- }
- double calc(double a1)
- {
- return pow(a1, 2);
- }
- double calc(double a1, double a2)
- {
- return a1 * a2;
- }
- double calc(double a1, double a2, double a3)
- {
- return a1 + a2 + a3;
- }
复制代码
这样你的函数重载就可以正确工作了。函数重载就是让同一个函数名称有多个实现版本,每个版本根据它的参数类型和数量的不同来区分。在你的代码中,你只声明了一个版本,这就是你的问题所在。
|
|