注册 登录
编程论坛 C++教室

关于函数重载

boris250 发布于 2007-10-01 23:05, 680 次点击

利用函数重载时,编写如下程序:
#include <iostream>
using namespace std;
int test(int a,int b);
float test(float a,float b);
int test(int,int,int);
int main()
{
cout << test(1,2) << endl;
cout<< test(2.1f,3.14f) << endl;
cout<<test(1,2,4)<<endl;
return 0;
}

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

float test(float a,float b)
{
return a+b;
}
int test(int a,int b,int c)
{
return a+b+c;
}同时遇到一个问题,如果函数的变量要在执行时输入,该如何定义变量,尤其是输入的参数个数不同时。

[此贴子已经被作者于2007-10-2 8:37:32编辑过]

9 回复
#2
Arcticanimal2007-10-02 16:28
用命令解析的形式获取参数
#3
mingreign2007-10-02 18:19
回复:(Arcticanimal)用命令解析的形式获取参数
       可以说的详细一点吗?谢谢.
#4
coachard2007-10-02 19:02
实在看不懂你的问题。。。
#5
编程高手2007-10-03 02:45
不明白LZ问什么
#6
野比2007-10-03 09:14

只需要在调用函数前将值输入各变量即可

cin>>a;cin>>b;
//然后
test(a,b);
//其余相同

#7
csmenglei9512007-10-03 10:18

你输入实参的个数一定要和函数定义时的参数一样啊
问大家一个问题啊就这个帖子
他前面已经申明了float test(float a,float b)两个形参是float,后面为什么还这样表示test(2.1f,3.14f)而不表示成test(2.1,3.14),而我改之后又提示错误"error C2668: 'test' : ambiguous call to overloaded function"
高手给我讲讲,不胜感激

[此贴子已经被作者于2007-10-3 10:36:51编辑过]

#8
Arcticanimal2007-10-03 12:01
回复:(mingreign)回复:(Arcticanimal)用命令解析...
LZ的意思大概是事先并不知道会调用到那个函数重载的版本, 由于这几个重载的参数个数和类型都不同, 所以在输入参数时就遇到了问题.
比如说用户想计算 test(1, 2, 3) 那么就要输入3个int参数, 但是在编码时并不能确定这个需求. 因此编码时就不能定义3个int然后要用户输入, 必须由程序动态的判断用户输入了几个参数, 分别是什么类型

int main(int argc, char* arv[])
{
int NumberOfArgs = argc - 1;
switch( NumberOfArgs )
{
case 2:
if( strfind(argv[1] , '.') > 0 ) // No such function is defined in string.h , DIY .
// ... // return the index value of the specified character in the string if character is found , otherwise return -1.
else
// ...
break;
case 3:
cout<<test( atoi(argv[1], atoi(arv[2]) , atoi(argv[3]))<<endl;
break;
}
return 0;
}
#9
body2022007-10-03 12:16

刚刚变成了论坛游民很兴奋
回答7楼:
这是因为VC的编译器默认小数为double型,而double型是不能转为float型的
要消除这个错误必须采用“强制解释”,即float a=3.14f; 加上一个f就可以了

#10
csmenglei9512007-10-03 13:02
谢谢9楼

1