博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++Premer Plus学习(五)——函数探幽
阅读量:5953 次
发布时间:2019-06-19

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

一、内联函数

1、优点:

     内联函数就是比较省资源,然后一般就是将简短,使用频率高的函数作为内联函数会比较合适。

 

2、一个demo

#include "stdafx.h"#include
using namespace std;inline double Square(double x) { return x*x; }int _tmain(int argc, _TCHAR* argv[]){ int a = 16; cout << Square(334);}

 

二、引用变量(别名)

1、创建引用变量

     C和C++使用“&”符号来表示指示变量的地址。但C++中“&”还表示声明引用

int rat;int © = rat;
     声明引用变量的时候必须进行初始化,一定要的。

 

2、将引用用作函数的形参

     直接将实参和形参进行关联起来,即类似于同一个人的不同名字。所以进行对形参的修改会导致实参一样跟着变化,因为两者本就是一体。

 

3、尽可能使用const

 

4、将引用作用于结构

// Exercise.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include
using namespace std;struct sysop{ char name[26]; char quote[64]; int used;};const sysop & use(sysop & sysopref);int _tmain(int argc, _TCHAR* argv[]){ sysop looper = { "Rick \"Fortran\" Lopper", "I'm a goto kind of guy.", 0 }; use(looper); cout << "Looper:" << looper.used << " use(s)\n"; sysop copycat; copycat = use(looper); cout << "Looper:" << looper.used << " use(s)\n"; cout << "use(looper):" << use(looper).used << " use(s)\n";//可以直接使用函数的返回值的结构体内的成员 return 0;}const sysop & use(sysop & sysopref) //返回值是一个引用,可以节约赋值的时间(不用再开辟临时变量){ cout << sysopref.name << endl; cout << sysopref.quote << endl; sysopref.used++; return sysopref;}

      一般返回值要加上const,这样子才不会修改返回值。例如下列情况。

use(looper).used=10;

      不应该返回函数终止时不再存在的内存单元的引用,例如

const sysop & clone(sysop & sysopref){   sysop newguy;   newguy = sysopref;   return newguy;}
     即在函数内声明的引用不可以作为返回值。

 

三、默认参数

1、定义:

    默认参数指的是当函数调用中省略了实参时自动使用的一个值。

 

2、设置方法:

   在声明函数的时候赋值:

char *left(const char *str , int n=1);

一些规则:

(1)必须从右往左添加默认值,也就是说要为某个参数设置默认值,则,其右边的参数一定也设置了默认值、

(2)实参必须从左往右一次被赋予相应的形参,不能跳过任何的参数。

 

四、函数重载

1、定义:

    同样的函数名称具有不同的函数功能。

 

2、实现方法:

    对于同样名称的函数,则需要有特征量进行区分,所以特征量即为形参的个数和类型

一些规则

(1)相同的类型的引用和非引用变量是同一中特征。

(2)匹配函数时,并不区分const和非const变量。

(3)返回值类型不作为特征量

 

五、函数模板

1、定义:

     同样的函数,只是参数的类型不同,所以制定一个函数的模板。

2、设置方法:

template 
//template可以替换为class
void Swap(Any &a, Any &b){    Any temp;    temp = a;    a = b;    b = temp;}

3、重载的模板

template 
void Swap(Any &a, Any &b);template
void Swap(Any a[],Any b[],int m);

4、显示具体化

     假如定义以下的结构:

struct job{   char name[20];   double salary;   int floor;}

     假如希望能够交换其中的salary和floor成员,而不交换两个变量的name成员。我们可以通过显示具体化来实现:

(1)相关规则

(2)一个demo

void Swap(job &,job &);template 
void Swap(Any &,Any &);template <> Swap
(job &,job &);//显示具体化

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

你可能感兴趣的文章
做错的题目——给Array附加属性
查看>>
Url.Action取消字符转义
查看>>
JQuery选择器大全
查看>>
Gamma阶段第三次scrum meeting
查看>>
python3之装饰器修复技术@wraps
查看>>
[考试]20150606
查看>>
Javascript_备忘录5
查看>>
Can’t create handler inside thread that has not called Looper.prepare()
查看>>
敏捷开发方法综述
查看>>
Hadoop数据操作系统YARN全解析
查看>>
修改数据库的兼容级别
查看>>
Windows下同时安装两个版本Jdk
查看>>
uoj#228. 基础数据结构练习题(线段树)
查看>>
JS键盘事件监听
查看>>
ios开发周期之--(向上,向下,四舍五入)取整
查看>>
加油!
查看>>
拦截导弹问题(动态规划)
查看>>
iOS 单元测试(Unit Test 和 UI Test)
查看>>
[linux小技巧]
查看>>
文件下载_中文乱码:"Content-disposition","attachment; filename=中文名
查看>>