引用
定义:变量的别名
引用的声明:类型标识符 &引用名=目标变量名;
引用的主要功能:作为函数的参数或返回值
void main(){ int a = 10; int &b = a; cout <<"引用:"<< b << endl; getchar();}复制代码
说明:
1、一开始定义引用必须要赋值
2、引用的大小很像指针
3、引用的本质是:指针常量
上图中,p = &b显示错误,是p保存的地址不能改变。
void modify(int &a){ a = 200;}void modifyB(int * const a){ *a = 150;}void main(){ int a = 10; int b = 5; //指针常量(这个指针所保存的地址不能改变) int * const p = &a; //p = &b; //不能改变 int x = 5; cout << x << endl; modify(x); cout << x << endl; modifyB(&x); cout << x << endl; getchar();}复制代码
函数
函数的使用通常包含以下几个步骤:
1)、函数声明:说明函数的名字、参数、返回类型。
说明:系统函数的声明通常放在头文件中
2)、函数调用:提供调用函数,实现相应功能,返回结果
result = square_sum(array, 5);复制代码
3)、函数定义
三种类型参数传递 1、值传递:(函数不能实现实参值交换功能)
void swap(int a, int b){ int c = 0; c = a; a = b; b = c;}void main(){ int a = 10; int b = 5; cout << "交换前:" << "a---->" << a <<" b---->"<< b << endl; swap(a,b); cout << "交换后:" << "a---->" << a << " b---->" << b << endl; getchar();}复制代码
2、指针传递:(实参、形参指向同一内存空间,函数能实现实参值交换功能)
void swap(int *a,int *b){ int c = 0; c = *a; *a = *b; *b = c;}void main(){ int a = 10; int b = 5; cout << "交换前:" << "a---->" << a <<" b---->"<< b << endl; swap(a,b); cout << "交换后:" << "a---->" << a << " b---->" << b << endl; getchar();}复制代码
3、引用传递:(形参是参数的别名,函数能实现实参值交换功能。形式更加直观)
void swap(int &a, int &b){ int c = 0; c = a; a = b; b = c;}void main(){ int a = 10; int b = 5; cout << "交换前:" << "a---->" << a <<" b---->"<< b << endl; swap(a,b); cout << "交换后:" << "a---->" << a << " b---->" << b << endl; getchar();}复制代码
内联函数(又称内置函数或内嵌函数)
内联函数与普通函数的区别:编译器直接将其函数代码插入到调用处。这样调用它时,就不会有压栈出栈问题(函数调用时用栈来传递参数和控制程序转移),因而其执行速度很快。
内联函数的声明与定义:在普通函数的基础上加inline关键字 (这并不意味着加了inline后就一定是内联函数)
inline void modify(int &a){ a = 200;}void main(){ int a = 10; int b = 5; modify(a); cout << a << endl; getchar();}复制代码
说明: 使用内联函数是一种用空间换时间的措施,若内联函数较长,且调用太频繁时,程序将加长很多。因此,通常只有较短的函数(一般为5个语句以下)才定义为内联函数,对于较长的函数最好作为普通函数处理。
通常,内联函数还有如下的限制:
1)不能有递归;
2)不能包含静态数据;
3)不能包含循环;
4)不能包含switch和goto语句;
5)不能包含数组。 若一个内联函数定义不满足以上要求,则编译系统把它当作普通函数对待。
带有默认参数值的函数
C++还允许在函数声明或函数定义中为形参指定一个默认值。在调用此类含默认值形参的函数时,如果形参有对应的实参,则将实参传递给形参;如果省略了实参,则将上述默认值传递给形参。
void printa(int a = 20){ cout << "a的值:" << a << endl;}void main(){ int a = 10; int b = 5; printa(); printa(a);//覆盖默认a的值 getchar();}复制代码
如果函数有多个默认参数,则默认参数必须是从右向左定义,并且在一个默认参数的右边不能有未指定默认值的参数。(原因:编译器在实参与形参对应时是按从左到右顺序进行的)
特别注意:如果在函数原型的声明中设置了函数参数的默认值,则不可再在函数定义的头部重复设置,否则编译时将出错。
重载函数
C++允许用同一个函数名定义多个函数(即“一名多用”),这些函数的参数个数或参数类型不同。这就是函数重载(function overloading)。 优点:便于记忆
void printa(int a){ cout << "a的值:" << a << endl;}void printa(float a, int b){ cout << "a的值:" << a << endl;}void printa(double a,int b,int c){ cout << "a的值:" << a << endl;}void printa(char* c, int a){ cout << "a的值:" << a << endl;}void main(){ int a = 10; int b = 5; printa(a);//覆盖默认a的值 getchar();}复制代码
区分依据标准:通过函数的参数个数、参数类型、参数顺序不同来区分
注意:重载函数的使用与普通函数类似,每一个函数都要进行声明与定义。
(4)注意事项:
1)不可以定义两个具有相同名称、相同参数类型和相同参数个数,只是函数返回值不同的函数
2)如果某个函数参数有默认值,必须保证其参数默认后调用形式不与其它函数混淆。
系统函数
标准C++函数:各种编译环境普遍支持,具有良好的移植性,建议优先使用。
头文件:如 cmath(或math.h)、 cstdlib(或stdlib.h)等
参考网站:http ://www.cppreference.com
非标准C++函数:当前操作系统或编译环境特有的,如:文件操作函数等。不同系统荐在差异,即是同一系统也有不同版本的不同。