C++学习日记(6)——初见函数

函数的基本特征

函数分为两种,有返回值和没有返回值

有返回值

例如标准库里计算平方根的函数sqrt()

int a;

a = sqrt(4);

上面的语句就调用了这个函数

4是传递给函数的信息

用这种方式发送给函数的值叫做参数

得到的结果为2,2这个值被发送出函数

发送回去的值就叫做返回值

在使用函数之前,IDE必须知道函数的参数类型和返回值类型

提供这些信息需要使用函数原型语句


函数原型语句

(注:程序里的每个函数都需要提供原型)

sqrt的函数原型是长这个样子的

double sqrt(double);

第一个double意思是函数要返回一个double的值

第二个double则是函数需要一个double的值

还记的我们前面说过的函数头吗

int main()

它是没有分号的,原型结尾的分号代表它是一条语句

省略这个分号IDE就会理解为这是个函数头

让你补充{}里函数体的部分

提供原型有两种方法

一是直接自己手打

二是用现成的,如果这个函数的功能刚好头文件有的话

大部分情况下都会使用包含头文件的方法

毕竟有现成的再写多麻烦啊

函数原型和函数定义是不一样的

原型只是告诉了程序这个函数的参数和返回值

值传进去后要做什么IDE是不知道的

定义包含了函数实际工作的部分

一般我们会把原型放在主函数(main)的前面

还记得之前讲过的初始化吗

int a=0;

double a = sqrt(b);

直接把函数赋值给变量也是可以的


函数变体

问题来了,如果我们传入的不止一个参数怎么办

那简单,参数间加个逗号就可以了

就像幂运算

double pow (double, double);

无返回值的函数

void array (double);

void这个关键字(注意它不是类型)指出函数没有返回值

所以你不能在初始化的时候用它来赋值

通常我们可能会叫他过程或子程序

但一般都叫函数


自己定义函数

返回值类型  函数名(){

         函数体

}

一般形式就是这样

注意不能嵌套定义(就是在函数定义中定义函数)

void ComunicateTime( int n ){

        cout<<“这是我第”<<n<<“次跟你交流”<<endl;

}

这就是一个简单的定义

void意味着这函数不用返回值

定义的参数n是整型的新变量

他被传入到下面的函数体中

然后执行输出的命令

int a=0;
int b=2;

a = a + b;

conmunicateTime(a);

最后的输出结果会是

这是我第2次和你交流


函数的命名

你会注意到我刚刚的命名

comunicateTime

我在并列的第二个单词的首字母都大写

这种命名方式叫做驼峰命名法

有时候为了方便辨认函数的功能

这个函数名可能会有好几个单词

这样看起来可以方便阅读

在以后工作中我也建议使用这种命名方式

我个人其实更喜欢这样

comunicate_time

但是下划线有的人看起来其实不是很舒服

你问我为啥不用拼音?

土(错误的想法)

方便和国际接轨(正解)

关键字

函数名字当然不能起的这么随心所欲

有些词是NG的

例如接触到的int\void\return\double等

这些都是C++专用的

我们称他们为关键字

总之不要用,会引起很多不必要的麻烦


关于命名空间

using这条指令放在函数里和函数外是有区别的

如果你放在最开头包含头文件的后面

那么之后所有的函数都可以使用std里面的东西

如果你只是放在一个函数的定义里面

那么只有那个函数可以使用std里面的东西

再或者你干脆就不用

在使用std里面的东西时直接加个前缀std::

例如std::cout<<“std”<<std::endl;(没错,endl也是std里面的)


总结

一般函数的使用就是这样

  • 函数原型
  • 主函数
  • 函数定义

函数原型放在前面

然后主函数

然后再函数定义

当然你也可以不写函数原型

变成这样

  • 函数定义
  • 函数原型

如果向代码规范靠齐的话我建议直接记前一种

后面这个你们就当没看到了

最关键的一句话

C++程序由一个或多个被称为函数的模块组成

下章做做习题好了

发表评论

您的电子邮箱地址不会被公开。