博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 引用和函数的高级特性
阅读量:6677 次
发布时间:2019-06-25

本文共 3013 字,大约阅读时间需要 10 分钟。

引用

定义:变量的别名

引用的声明:类型标识符 &引用名=目标变量名;

引用的主要功能:作为函数的参数或返回值

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++函数:当前操作系统或编译环境特有的,如:文件操作函数等。不同系统荐在差异,即是同一系统也有不同版本的不同。

转载地址:http://zogxo.baihongyu.com/

你可能感兴趣的文章
在XenServer上更改Win7 64bit模板的内存
查看>>
二维数组和二维指针在CUDA中的应用
查看>>
二项式展开
查看>>
推荐系统-03-简单基于用户的推荐
查看>>
Android scaleType属性与ImagView中图片的显示的关系
查看>>
十、cent OS开启APR模式报错:configure: error: Found APR 1.3.9. You need version 1.4.3 or newer installed...
查看>>
八、阻塞等待异步结果FutureTask
查看>>
中文字符按拼音首字母排序(转)
查看>>
Supervision 行为模式
查看>>
【mysql】一次有意思的数据库查询分析。
查看>>
Spring 框架中注释驱动的事件监听器详解
查看>>
C++获取window临时路径
查看>>
Python(面向对象编程—1)
查看>>
自己封装的数据通信服务组件DotNet.ServiceModel
查看>>
Docker创建虚机和swarm
查看>>
JSON入门学习
查看>>
一个很好的UML工具
查看>>
[转]无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues...
查看>>
函数Curry化
查看>>
二进制补码,原码,反码和移码
查看>>