函数的概念
一个函数由:函数的返回值类型、函数名、参数表、函数体 这4个部分组成。
int Add( int _a , int _b )
{return _a + _b;
}
该函数 Add 完成对两个整型数据的求和功能。
函数的调用方式: 函数名(参数表);
在代码区键入如下代码,观察程序运行结果
#include<iostream>using namespace std;int Add( int _a , int _b ){return _a + _b;}void main()
{int iResult = Add(3, 5); // 该行既为函数的调用cout<<iResult<<endl;system(“pause”);}
函数的定义,声明、实现
函数的定义:该函数出现的时候就具有返回值、函数名、参数表、函数体
在代码区键入如下代码,观察运行结果:
#include <iostream>using namespace std;void GetSum( int _a , int _b )
{cout<<"两数之和为:"<<_a+_b<<endl;}void main()
{GetSum(3,5);system("pause");}
如果代码变为如下样子,是否有问题?
#include <iostream>using namespace std;void GetSum(int, int);void main()
{GetSum(3,5);system("pause");}void GetSum( int _a , int _b )
{cout<<"两数之和为:"<<_a+_b<<endl;}
如果代码变为如下样子,是否有问题?
#include <iostream>
using namespace std;void main()
{void GetSum( int _a , int _b ){cout<<"两数之和为:"<<_a+_b<<endl;}GetSum(3,5);system("pause");}
函数的声明:该函数出现的时候只具有返回值、函数名、参数表,但是缺少函数体,而以分号作为结尾
函数的实现:在声明过一个函数之后,我们为其添加函数体的过程
在代码区键入如下代码,观察运行结果
#include <iostream>
using namespace std;void GetSum( int, int); // 声明一个函数void main()
{GetSum(3,5); //调用一个已经声明过的函数system("pause");}
代码修改如下,观察运行结果
#include <iostream>
using namespace std;void GetSum( int , int ); // 函数的声明,在声明一个函数的时候我们可以不给出函数的形参名void main()
{GetSum(3,5); //调用一个已经声明过的函数system("pause");}void GetSum( int _a , int _b ) //函数的实现
{cout<<"两数之和为:"<<_a+_b<<endl;}
通过以上讲解可以看出:
- 一个函数既可以定义,也可以先声明,后实现
- 两种形式的函数在调用上无区别
- 函数的定义往往出现在程序结构相对简单的代码中
- 函数的声明、实现经常出现在代码需要拆分为 .h 与 .cpp两个文件中的情况(例如我们后面将要讲解的类,类的函数的声明出现在它的.h文件中,而该函数的实现往往出现在.cpp文件中)
一个函数:由函数返回值、函数名、参数表、函数体这四个部分组成
- 函数返回值:可以是任何基本数据类型。
- 函数名是由用户定义的标识符,需遵循C++标识符命名规则。
- 函数的参数表,由()中间的参数组成。参数是用于向函数传递数据的变量。
- 函数体为当前函数所能完成功能的复合语句。
注意:main函数是一个特殊的函数,它是C++的入口函数。
函数返回值可以是任何基本数据类型。
在代码区键入以下代码,编译并运行后查看结果
#include <iostream>
using namespace std;int getSum(int _a , int _b)
{return _a+_b;}void main(){int iResult = getSum(3,5);cout<<"3+5 = "<<iResult<<endl;system("pause");
}
函数的返回值
将代码改写为如下,编译并运行后查看结果
#include <iostream>using namespace std;int getSum(int _a , int _b)
{return _a+_b;}void main(){// int iResult = getSum(3,5);cout<<"3+5 = "<<getSum(3,5)<<endl;system("pause");}
在函数的返回值类型不是“void”的情况下,函数体内部必须至少存在一个“return”语句,用于返回必要的数据。
#include <iostream>
using namespace std;bool playerIsDead(int _hp)
{if( _hp > 0 )return false;return true;
}
void main(){int iHP = 0;cout<<"请输入玩家HP:"<<endl;cin>>iHP;if( playerIsDead(iHP) )cout<<"玩家死亡"<<endl;elsecout<<"玩家存活"<<endl;system("pause");
}
注意:在函数内部需要分支返回的情况下,必须确保所有分支路径都具有返回值。否则程序将会提示警告:“不是所有路径都有返回值”
如果一个函数不需要返回任何数据,使用void作为函数的返回值
如果一个函数的返回值为void时,return语句可以省略。
在代码区键入以下代码,编译运行查看结果
#include <iostream>
using namespace std;void printArray( int _iArray[] , int _length ){for(int i = 0 ; i < _length ; ++i)cout<<_iArray[i]<<endl;
}
void main(){int iArray[10] = {1,2,3,4,5,6,7,8,9,10};printArray(iArray,10);system("pause");}
函数名
函数名的命名要遵循C++标识符的命名规则。
可以采取驼峰式命名规则:
如:
GetSum
PlayerIsDead
首个单词首字母小写,其他单词首字母大写
函数的参数表
函数的参数表由() 中间添加向该函数传递的参数组成。
参数是用于向函数传递数据的变量。
函数参数的()中可以没有任何参数,但是()不能省略
#include <iostream>
using namespace std;void main()
{cout<<"parameter"<<endl;system("pause");
}
函数的参数分为两种:形式参数(形参)、实际参数(实参)
形参出现在函数声明或定义中,在整个函数体内都可以使用,离开该函数则不能使用。
实参出现在调用语句中,进入被调函数后,实参不能使用。
在代码区键入如下代码,编译并运行查看结果:
#include <iostream>
using namespace std;int getMax( int _a , int _b ) {return _a > _b ? _a: _b;
}void main()
{int iValue1 = 10 , iValue2 = 5;cout<<"较大的为:"<<getMax(iValue1,iValue2)<<endl;system("pause");}
函数的形参和实参具有以下特点:
- 形参变量只有在被调用时才分配内存单元,在调用结束时释放所分配的内存单元。
- 实参可以是常量、变量、表达式等。
- 实参和形参的数量和顺序应严格一致。
函数的缺省参数(默认参数、可选参数):
在函数的参数表中被赋以初始值的参数
函数可以在参数表中设置一个或多个参数的缺省值。
void Test( int _a , int _b = 4);
Test(); //正确
Test(10); //正确
Test(100,200); //正确
Test( , 200); //错误
函数调用时,实参表和形参表中的参数是按位置对应的。
缺省参数只能从后向前替代缺少的实参值。
如果我们将没有赋初始值的参数称之为:必选参数,那么当我们在定义一个函数的时候:
该函数的参数中必须同时既有必选参数,又有可选参数,它的定义形式一定为:
返回值 函数名(必选参数1,.,.,必选参数n,可选参数1,.,.,可选参数n)
void Test( ); //正确
void Test( int _a ); //正确
void Test( int _a , int _b = 0 ); //正确
void Test( int _a = 0 , int _b = 0 ); //正确
void Test( int _a = 0 , int _b ); //错误
函数体
函数体为当前函数所能完成功能的复合语句。
例如:该函数返回两个参数中较大的一个
int getMax( int _a , int _b ) {if(_a > _b)return _a;elsereturn _b;}
今天主要讲解了函数的基本概念、函数的声明、实现、定义,函数的基本组成部分等函数相关的基本概念。
这些基本概念是我进行后续学习的基础。
学习资料领取:
https://pan.baidu.com/s/1VX_zb_eqWH_coos1ZB9QQw
提取码:w8st
学习从来都不是一个人的事,如果你感觉小编的这篇文章对你有帮助的话,可以关注小编首页和小编来一起学习C/C++语言,小编会持续更新后续的内容哦!!