c++中如何让函数的形参是 java中double转int或者int,比如让下面例子里的形参也可以是int,这样不用写两个函数了

C++ 函数名作为参数传递给另一个函数_Linux编程_Linux公社-Linux系统门户网站
你好,游客
C++ 函数名作为参数传递给另一个函数
来源:Linux社区&
作者:chen.junchang
将函数名作为参数传递给另外一个函数(其实函数名是一个函数指针)
例1:int f1(){&&& return 1;}int f2(){&&& return 2;}void f(int f()){&&& printf("%d/n",f());}int main(){&&& f(f1);&&& f(f2);&&& return 0;}
例2:void listArray(void handler(int &item)){&&& int ia[] = {1, 2, 3, 4, 5, 6};&&& for(int i = 0; i & 6; ++i) &&& {&&&&&&& if(handler)&&&&&&&&&&& handler(ia[i]);&&&&&&& std::cout && i && ":" && ia[i] && " ";&&& }&&& std::cout && std::}
void doubleValueHandler(int &i){&&& if(i % 2 == 0) &&&&&&& i *=&&&}
void testMethodHandler() {&&& listArray(NULL);&&& listArray(doubleValueHandler);}
输出:0:1 1:2 2:3 3:4 4:5 5:60:1 1:4 2:3 3:16 4:5 5:36
相关资讯 & & &
& (04月14日)
& (01月23日)
& (04月27日)
& (02月06日)
& (01月23日)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
匿名 发表于 例2中调用void doubleValueHandler(int &i)时,没带参数,那么i的值是怎么变化的?&&/&&&&/&&&&/&&
在上一节,我们已经学会了如何阅读函数原型和如何调用一个函数。然而,仅靠系统给出的标准库函数是不够用的。我们有时候要根据我们的实际要求,写出一个合适自己使用的函数。
那么,我们如何来自己动手编写一个函数呢?
首先,我们要告诉电脑,我们自己编写了一个函数,即这个函数是存在的,这叫作函数的声明(Declaration)。其次,我们要告诉电脑这个函数是怎么运作的,这叫作函数的定义(Definition)。显然,函数的声明和函数的定义是两个不同的概念。声明表示该函数存在,而定义则是表示该函数怎么去运行。
我们平时做事都是要有先后顺序的,如果把次序颠倒了可能会惹些麻烦出来。编写函数的时候也一样。我们必须在调用一个函数之前就告诉电脑这个函数已经存在了,否则就成了&马后炮&。所以,我们一般把函数的声明放在主函数前面。
函数的声明
在C++中,函数原型就是函数的声明。所以,函数原型除了向用户说明如何使用一个函数以外,还告诉电脑存在这样一个可以使用的函数。
我们已经介绍了函数原型的结构,只不过&产生结果类型&这个名称是为了方便理解而起的。它应该称为&返回值类型&,用任意一种数据类型来表示,比如int或者char等等,当然还包括空类型void。多个参数则构成了&参数表&,表示运行这个函数需要哪些数据。于是,函数原型的结构就是:
& & 返回值类型函数名(参数表);
函数声明同变量的声明一样,是一句语句。所以在语句结束要加上分号。函数名、参数名的规则和注意事项同变量名一样。
关于&返回&的概念稍后再作介绍,我们先来说说参数表。我们知道,在声明函数的时候,会写一些参数,而在调用函数的时候需要一一对应地填入这些参数。虽然它们都叫参数,但在不同的情况下,它们的含义是不同的。在声明一个函数的时候,参数是没有实际值的,只是起到一个占位的作用,所以称为形式参数,简称&形参&;在调用一个函数的时候,参数必须有一个确定的值,是真正能够对结果起作用的因素,所以称为实际参数,简称&实参&。我们拿数学中的函数作为例子,g(x,y)=x/4+y中的x和y就是形式参数,而g(4,1)=4/4+1=2中的4和1就是实际参数;如果令a=4、b=1,那么g(a,b)中的a和b也是实际参数。
函数的定义
说完了函数的声明,我们来说函数的定义。其实函数的定义对大家来说是比较熟悉的。因为我们之前所写的程序都是对主函数的定义。函数定义的格式为:
没有分号结尾的函数原型
& & 语句块;
我们把函数定义中没有分号结尾的函数原型称为函数头,把之后的语句块称为函数体。任何一个函数的定义不能出现在另一个函数体内。但函数体内可以调用任何一个函数,包括其本身。
下面我们先来看一个例子,你就会对函数定义有些了解了。(程序6.2.1)
运行结果:
程序在运行的时候从main函数开始,遇到调用一个用户定义的函数max,则去查找这个max函数的定义,然后运行max函数。运行完了以后,回到调用max函数的地方,继续后面的语句,直到程序结束。所以整个程序的运行过程如箭头所示。
不要使用相同的变量和参数
如果在一个班级里有两个同名同姓的同学,那么老师上课点名将是件麻烦事。因为大家都搞不清到底是在叫谁。可是,如果两个不同的班级有两个同名同姓的同学,就不会发生这种尴尬,因为老师在不同的教室点相同的名字,会有反应的只有一个同学。
我们把这个问题套用到函数上来。如果在同一个函数有两个名字相同的变量,那么电脑将无法分清到底要使用哪个变量,导致错误发生。而在不同的函数中,即使有相同名称的变量,由于在某一个函数中该变量的名称是唯一的,电脑也能方便的识别要使用哪个变量。因此,我们得到这样一个结论:一般情况下,在同一个函数中,不能有名称相同的变量或参数;在两个不同的函数中,可以有名称相同的变量或参数。
下面就让我们来看一个实例:(程序6.2.2)
#include &iostream.h&
int max(int a,int b,int c);//求三个整数的最大者
int min(int a,int b,int c);//求三个整数的最小者
void output(int a);//输出功能
int main()
& &int a=3,b=4,c=2;
& &output(max(a,b,c));//把max函数的返回值作为output函数的实参
& &output(min(a,b,c));
& &return 0;
int max(int a,int b,int c)//不在同一个函数中,参数名重复没关系
& &if (a&=b && a&=c)
& &if (b&=a && b&=c)
& &//一旦执行了前面的return,这句就不会被执行到
int min(int a,int b,int c)
& &if (a&=b && a&=c)
& &if (b&=a && b&=c)
void output(int a)
& &cout &&a &&
& &//返回空类型
运行结果:
要注意,一旦函数运行结束,那么该函数中声明的参数和变量都将消失。就像下课了,同学们都回家了,老师叫谁都是叫不应的。
推荐文章 TOP10> 问题详情
以下对C++语言函数的有关描述中,正确的是A.在C++语言中调用函数时,只能把实参的值传给形参,形参
悬赏:0&答案豆
提问人:匿名网友
发布时间:
以下对C++语言函数的有关描述中,正确的是A.在C++语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参B.C++语言函数既可以嵌套定义又可以递归调用C.函数必须无返回值,否则不能使用函数D.函数必须有返回值,返回值类型不定
您可能感兴趣的试题
1关于静态数据成员的描述中正确的是A.类的静态数据成员不是类的所有对象共享的数据B.类的静态数据成员不能被类的成员函数调用C.类的静态数据成员不能被类的构造函数调用D.类的静态数据成员必须进行初始化2复制构造函数的参数一般是A.某对象名B.某对象成员名C.某对象的引用名D.指向对象的指针名
我有更好的答案
论文写作技巧
相关考试课程
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……在c++中,定义了一个以函数作为形参的函数体:double a(double f(double),int n); 而实际调用的时候,函数_百度知道

我要回帖

更多关于 double 转int 的文章

 

随机推荐