|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
这样你的函数重载就可以正确工作了。函数重载就是让同一个函数名称有多个实现版本,每个版本根据它的参数类型和数量的不同来区分。在你的代码中,你只声明了一个版本,这就是你的问题所在。
|
|