【c++基础】5.标识符、关键字、函数
来源:互联网 发布:逆战天梯怎么卡数据 编辑:程序博客网 时间:2024/06/05 14:07
【一】标识符和关键字
标识符是实体唯一标识,也就是实体名,比如变量名,函数名,类名,结构名等,都是标识符,标识符由用户(编程人员)自己定义,遵循一定的规则命名规则,具体如下:
第一个字符必须是字母或下划线;
后跟字母、下划线、或数字;
标识符对大小写敏感;
不能与c++保留字(即关键字)同名;
以上是c++命名必须遵循的名字规则,只要满足以上规则都是合法的标识符,但是合法的标识符并不一定就是好的标识符,比如:
int a;int student_number;int stu_num;
这三个名字都是合法的名字,但是第一个意义不明确,第二个意义明确但是太长,第三个在合适的应用场景下就比较合适。
一个好的命名规范不仅可以提高代码可读性,有时候还能减少代码出错的可能性,关于命名规范,可以参考Google的c++命名规范,到这里下载:链接
关键字是c++的保留字,不能作为标识符使用,ISO C++98/03关键字共63个,c++11新增了10个,一共73个。
关于c++关键字的详细信息,可以查看百度百科链接,上面有比较详细的说明,这些关键字不必要强记,多写代码,多看代码,会慢慢记住的。
【二】函数
函数是一组包含多个语句的语句块,用于完成一个小的功能模块。不要把这个函数和数学里的函数混淆起来,虽然他们有共通之处,都是为解决一个问题二设计的小功能模块,但数学里的函数主要是解决数学问题的,而c++中的函数更广义,当然也包括数学问题。
在类中,函数叫成员函数,是类对应的事物的行为的抽象。
每个c++程序的入口函数为main(),也就是说,只有有了main()函数你的程序才能执行。
1、函数声明
函数声明告诉编译器函数的名字,返回类型和参数列表,函数声明并不为函数创建实体,也就是没有函数体。声明之后的函数已经具有了函数调用所需的信息,但不能进行执行。格式如下:
return_type function_name(parameter_list);
如申明一个两整型的加法函数:
int add(int a,int b);
2、函数定义
函数定义为函数创建实体,经定义的函数才能执行。格式如下:
return_type function_name(parameter_list){//body of funciton;}
如两整型的加法函数定义:
int add(int a,int b){return a+b;}
在 C++ 中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:
返回类型:一个函数可以返回一个值。return_type是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
函数主体:函数主体包含一组定义函数执行任务的语句。
函数声明和定义的区别和变量声明和定义的区别有点相似,声明就是只给出一个名和相关信息,定义时才为其创建实体,一般函数声明写在头文件中,而在cpp文件中进行实现。
3、函数调用
在调用某个函数之前必须声明该函数,一般把函数声明写在该文件的开头部分,或者包含已声明该函数的头文件。
当程序调用函数时,程序控制权会转移给被调用的函数,并用实参为形参初始化。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序,并返回return语句之后的值(如果有的话)。一个小例子:
#include <iostream>using namespace std;//声明函数,该函数完成两个int值的加法int add(int a,int b);int main(){int i=2;int j=3;//此处定义一个int型变量并将其初始化为add函数的返回值。int result=add(i,j);ocut<<"result of function:"<<result<<endl;return 0;}//函数定义,具体实现int add(int a,int b){return a+b;}
需要注意的是:在发生函数调用是,程序需要将主调函数的上下文保存下来(也就是当前指令的寄存器内容,具体介绍是在计算机组成原理或者计算机系统结构课程中,可以自行学习),以便返回主调函数时可以从调用处继续执行,这种保存上下文需要消耗很大开销,为了避免这种开销,c++中使用inline关键字来将函数声明为内联函数。
编译器在调用内联函数的地方将内联函数展开,也就是用函数体代替函数名。
如:
//定义内联函数inline int add(int a,int b){return a+b;}//调用内联函数int x=1,y=2;cout<<add(x,y)<<endl;
调用的地方被展开为:
cout<<(x+y)<<endl;
inline关键字只是给编译器一个建议,编译器可以忽略这个建议不进行展开而进行函数调用,这是因为如果函数体太大,展开所用的开销将大于函数调用有的甚至不能进行展开,此时编译器将忽略inline。
4、函数重载
两个函数若除了参数列表不同外,其他都相同,那么称这个函数被重载,重载函数通过参数列表来区分具体调用的实例,比如,要进行两个数的加法,但加数类型不确定,那么就可以使用重载函数来进行,如下:
#include <iostream>using namespace std;//声明函数,该函数完成两个int值的加法int add(int a,int b);//当然你也可以不声明,直接定义double add(double a,double b){cout<<"add two double"<<endl;return a+b;}int main(){int i=2;int j=3;double x=2.0;double y=3.0;//此处定义一个int型变量并将其初始化为add函数的返回值。int result=add(i,j);cout<<"result1:"<<result<<endl;//可以将返回值直接输出cout<<"retult2:"<<add(x,y)<<endl;return 0;}//函数定义,具体实现int add(int a,int b){cout<<"add two integer"<<endl;return a+b;}
输出:
add two integer
result1:5
add two double
retult2:5
5.函数参数
函数实参的类型必须与形参类型匹配,实参用于调用时为形参进行初始化,是主调函数与被调函数之间传递参数的一种方式,函数参数的类型根据需要可以是任意的,包括用户自定义类型,参数类型可以是一个变量,或者一个指针,或者一个引用。按照参数类型的不同,可以将函数调用分为传值调用、指针调用和引用调用。
传值调用:该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
指针调用:该方法把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
引用调用:该方法把参数的引用复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
具体使用哪种方法,还要看具体应用,如果你需要在函数中改变主调函数中的值,可以选择使用指针调用或者引用调用,否则使用传值调用。
6、参数默认值
可以为函数参数指定一个默认值,如果函数调用时为传入值,将使用默认值,如下:
#include <iostream>using namespace std;//声明函数,第二个参数默认为10int add(int a,int b=10){return a+b;}int main(){int i=2;int j=3;//调用时只传入一个参数,第二个参数缺省,使用默认值int result=add(i);ocut<<"result of function:"<<result<<endl;return 0;}
由于函数调用参数列表是从左到右匹配的,故函数默认值必须从右到左设置,否则无法进行匹配。
- 【c++基础】5.标识符、关键字、函数
- C语言基础—关键字和标识符
- 黑马程序员——C语言基础语法(关键字、标识符、注释符、变量、作用域、printf函数、Scanf函数)
- C 【关键字&标识符】
- C语言基础—语言概述、关键字、标识符和注释
- 黑马程序员-C语言基础一:关键字、标识符、注释
- Java基础-关键字、标识符、变量
- C语言 关键字、标识符、注释
- C语言基础 标识符
- 【JAVA】5.标识符、关键字
- Java语言基础组成:关键字、标识符、注释、常量和变量、运算符、语句、函数、数组
- 黑马程序员——C语言基础-关键字、标识符、注释、数据类型、常量、变量
- iOS学习笔记之-C语言基础02(关键字、标识符、注释、数据类型)
- Java 基础语法:标识符、关键字、数据类型
- Java基础——关键字vs标识符
- JAVA_SE基础——6.标识符&关键字
- 黑马程序员-【JAVA基础】-标识符与关键字
- JAVA语法基础之标识符和关键字
- shell中执行没有问题的脚本,交给cron后出错,如何解决?
- 关于函数柯里化的一些理解
- 实现服务器和客户机的交互
- java连接sqlserver2016方法
- AS导入项目出现Error:Execution failed for task ':app:processDebugManifest'.错误
- 【c++基础】5.标识符、关键字、函数
- python基础内容
- GRASP设计模式
- Gradle使用基础
- java初学者学习须知
- nginx简单配置
- 各种Popwindow和Dialog的汇总以及仿ios的,可以自定义布局,也可以傻瓜式的代码生成,使用非常方便
- C#中的多线程
- linux常用命令