c++怎样编写不确定参数个数的函数?
即函数的参数的个数是不确定的,可能是1个,2个,或者100个,甚至更多。比如c的函数库里面的printf(...),scanf()等,这些函数里面的参数的个数都是不确定的...
即 函数的参数的个数是不确定的,可能是1个,2个,或者100个,甚至更多。
比如c的函数库里面的 printf(...),scanf()等,这些函数里面的参数的个数都是不确定的。
这样的函数该怎样写?
又如何在函数里面获取参数的个数,以及如何获取每个参数的值? 展开
比如c的函数库里面的 printf(...),scanf()等,这些函数里面的参数的个数都是不确定的。
这样的函数该怎样写?
又如何在函数里面获取参数的个数,以及如何获取每个参数的值? 展开
3个回答
展开全部
重载和缺省都不能解决楼主的问题。想解决这个问题,必须用到va_list。
但是注意,并不是所有编译器都支持这个功能,下面这个简单的求均值函数在VC6.0下编译通过。希望楼主能用到自己的实际应用中。
#include <cstdarg>
#include <iostream>
using namespace std;
double average ( int num, ... )
{
va_list arguments; // A place to store the list of arguments
double sum = 0;
va_start ( arguments, num ); // Initializing arguments to store all values after num
for ( int x = 0; x < num; x++ ) // Loop until all numbers are added
sum += va_arg ( arguments, double ); // Adds the next value in argument list to sum.
va_end ( arguments ); // Cleans up the list
return sum / num; // Returns some number (typecast prevents truncation)
}
int main()
{
cout<< average ( 3, 12.2, 22.3, 4.5 ) <<endl;
cout<< average ( 5, 3.3, 2.2, 1.1, 5.5, 3.3 ) <<endl;
}
补充一句:不确定输入参数个数的函数应该尽量的避免使用,除非万不得已,最好不要用。
但是注意,并不是所有编译器都支持这个功能,下面这个简单的求均值函数在VC6.0下编译通过。希望楼主能用到自己的实际应用中。
#include <cstdarg>
#include <iostream>
using namespace std;
double average ( int num, ... )
{
va_list arguments; // A place to store the list of arguments
double sum = 0;
va_start ( arguments, num ); // Initializing arguments to store all values after num
for ( int x = 0; x < num; x++ ) // Loop until all numbers are added
sum += va_arg ( arguments, double ); // Adds the next value in argument list to sum.
va_end ( arguments ); // Cleans up the list
return sum / num; // Returns some number (typecast prevents truncation)
}
int main()
{
cout<< average ( 3, 12.2, 22.3, 4.5 ) <<endl;
cout<< average ( 5, 3.3, 2.2, 1.1, 5.5, 3.3 ) <<endl;
}
补充一句:不确定输入参数个数的函数应该尽量的避免使用,除非万不得已,最好不要用。
展开全部
不确定参数个数的时候通常用的是函数的重载,可以理解成 函数名相同的两个不同的函数.
不确定参数类型的话可以用 模板(template).传什么类型就变成什么类型.
不确定参数类型的话可以用 模板(template).传什么类型就变成什么类型.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
想到两种方法:
一是用函数重载,列出带有不同个数参数的函数;
二是用带默认值的形参实现。
一是用函数重载,列出带有不同个数参数的函数;
二是用带默认值的形参实现。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询