设为首页 加入收藏

TOP

C++ 基础学习之使用有返回值的函数以及函数变体讲解(一)
2018-06-02 10:38:36 】 浏览:1341
Tags:基础 习之 使用 返回 函数 以及 变体 讲解

2.4函数

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

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

2.4.1 使用有返回值的函数

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

x=sqrt(6.25);

表达式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值。括号中的double意味着sqrt()需要一个double参数。因此该原型对sqrt()的描述和下面代码中使用的函数相同:

double x;

x=sqrt(6.25);

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

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

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

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

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

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

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

程序2.4 sqrt.cpp

\

注意:如果使用的是老式编译器,则必须在程序2.4中使用#include ,而不是#include

使用库函数

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

cc sqrt.C -lm

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

g++ sqrt.C -lm

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

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

\

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

type-name variable-name;

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

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

double side = sqrt(area);

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

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

2.4.2 函数变体

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

double pow(double,double);

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

answer=pow(5.0,8.0);

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

int rand(void);

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

myGuess=rang();

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

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

void bucks(double);

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

bucks(1234.56);

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

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++基础之C++语句整理 下一篇C++STL:流迭代器的函数构造、定..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目