C++ 自定义函数必须有函数返回值的返回值怎么在主函数里使用见下图

由于函数用于创建C++程序的模块茬C++OOP定义至关重要,因此必须熟悉它含火速的某些方面术语高级主题,将在第七章和第八章重点讨论函数然而,现在了解函数的一些基本特性将使得在以后的函数学习中更加得心应手。本章剩余的内容将介绍函数的一些基本知识

C++函数分两种:有返回值的和没有返回徝的。在标准C++函数库中可以找到这两类函数的例子您也可以自己创建这两种类型的函数。下面首先来看一个有返回值的库函数然和介紹如何编写简单的函数。

2.4.1 使用有返回值的函数

有返回值的函数将生成一个值而这个值可以赋给变量或在其他表达式中使用。例如标准C/C++庫包含一个名为sqrt()函数,它返回平方根假设要计算6.25的平方根,并将这个值赋给变量x则可以在程序中使用下面的语句:

表达式sqrt(6.25)将调用sqrt()函数。表达式sqrt(6.25)被称为函数调用被调用的函数叫做被调用函数,包含函数调用的函数叫做调用函数

圆括号中的值是发送给函数的信息,这被稱为传递给函数以这种方式发送给函数的值叫做参数。函数aqrt()得到的结果是2.5并将这个值发送给调用函数;发送回去的值叫做函数的返回徝。可以这么认为函数执行完毕后,语句中的函数调用部分将被替换为返回的值因此,这个例子将返回值赋给变量x简而言之,参数昰发送给函数的信息返回值是从函数中发送回去的值。

基本情况上就是这样只是在使用函数之前,C++编译器必须知道函数的参数类型和返回值类型也就是说,函数是返回整数、字符、小数、有罪裁决还是别的什么东西如果缺少这些信息,编译器将不知道如何解释返回徝C++提供这种信息的方式是是用函数原型语句。

注意:C++程序应当为程序中使用的每个函数提供原型

函数原型之于函数就像变量声明至于變量——指出涉及的类型。例如C++库将sqrt()函数定义成将一个(可能)带小数部分的数字作为参数,并但会一个类型相同的数字有些语言将這种数字称为实数,但是C++将这种类型称为double(将在第三章介绍)sqrt()函数原型像这样:

第一个double意味着sqrt()将返回一个double值。括号中的double意味着sqrt()需要一个double參数因此该原型对sqrt()的描述和下面代码中使用的函数相同:

原型结尾的分号表明它是一条语句,这使得它是一个原型而不是函数头。如果省略分号编译器将把这行代码解释为一个函数头,并要求接着提供定义该函数的函数体

在程序中使用sqrt()时,也必须提供原型可以用兩种方法来实现:

l 在源代码文件中输入函数原型;

l 包含头文件cmach(老系统为math.h),其中定义了原型

第二种方法更好,因为头文件更有可能使原型正确对于C++库中的每个函数,都在一个或多个头文件中提供了其原型请用过手册或在线帮助查看函数描述来确定应使用哪个头文件。例如sqrt()函数的说明将指出,应使用cmach头文件(同样,可能必须使用老式的头文件math.h它可用于CC++程序中。)

不要混淆函数原型和函数定义可以看出,原型只描述函数接口也就是说,它描述的是发送给函数的信息而定义中包含了函数的代码,如计算平方根的代码CC++将庫函数的这两项特性(原型和定义)分开了。库文件中包含了函数的编译代码而头文件中则包含了原型。

应在首次使用函数之前提供其原型通常的做法是把原型放到main()函数定义的前面。程序2.4演示了库函数sqrt()的用法它通过包含cmath文件来提供该函数的原型:

C++库函数存储在库文件Φ。编译器编译程序时它必须在库文件搜索您使用的函数。至于自动搜索哪些库文件将因编译器而异。如果运行程序2.4时将得到一条消息,指出_sqrt是一个没有定义的外部函数(似乎应当避免)则可能是由于编译器不能自动搜索数学库(编译器倾向于给函数名添加下划线湔缀——提示它们对于程序具有最后的发言权)。如果在UNIX实现中遇到这样的消息可能需要在命令行结尾使用-lm选项:

linux系统中,有些版本嘚Gnu编译器于此类似:

只包含cmath头文件就可以提供原型但不一定会呆滞编译器搜索正确的库文件。

下面是该程序的运行情况:

由于sqrt()处理的是double徝因此这里将变量声明为这种类型。声明double变量的语法于声明int变量相同:

能够存储带小数的值如1536.039.1918。将看起来是整数(如1536)的值赋给double变量时将以实数形式存储它,其中的小数部分为.0在第三章将指出,double类型覆盖的范围要比int类型大得多

C++允许在程序的任何地方声明新变量,因此sqrt.cpp在要使用side时才声明它C++还允许在创建变量是对它进行赋值,因此也可以这样做:

这个过程叫做初始化将在第三章更详细的介绍。

cin知道如何将输入的流中的信息转换为double类型cout知道如何将double类型插入到输出流中,前面讲过这些对象都很智能化。

有些函数需要多项信息這些函数使用多个参数,参数间用逗号分开例如,数学函数pow()接受两个参数返回值为以第一个参数为底,第二个参数为指数的幂该函數的原型如下:

要计算58次方,可以这样使用该函数:

另外一些函数不接受任何参数例如,有一个C库(与cstdlibstdlib.h头文件相关的库)包含一个rand()函数该函数不接受任何参数,并返回一个随机数该函数的原型如下:

关键字void明确指出,该函数不接受任何参数如果省略void,让括号为涳则C++将其解释为一个不接受任何参数的隐式声明,可以这样使用该函数:

注意与其他一些计算机语言不同,在C++中函数调用中必须包括括号,即使没有参数

还有一些函数没有返回值。例如假设编写了一个函数,它按美元、美分格式显示数字向它传递参数23.5时,它将茬屏幕上显示$23.50由于这个函数把值发送给屏幕,而不是调用程序因此不需要返回值。可以在原型中使用关键字void来指定返回类型以指出函数没有返回值:

由于它不返回值,因此不能将该函数调用放在赋值语句中相反,应使用一条纯粹的函数调用语句:

在有些语言中有返回值的而函数被称为函数;没有返回值的函数被称为过程或子程序。但C++C一样这两种变体都被称为函数。

}

我要回帖

更多关于 自定义函数的返回值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信