C++学习(八)——函数探幽
2016-05-23 10:23
471 查看
C++学习(八)——函数探幽
一、C++内联函数
内联函数调用时无需跳到另一个位置执行代码,而是直接将代码块替换到调用位置,因此运行速度更快。但代价是占用了更多的内存。在调用次数多,函数比较小时适用要使用这项特性,必须采取下列措施
- 在函数声明前加上关键字inline
- 在函数定义前加上关键字inline
#include<iostream> //an inline function definition inline double square(double x){return x*x}; int main() { using namespace std; double a,b; double c = 13.0; a=square(5.0); cout << a << endl; }
二、引用变量
引用是已定义变量的别名,主要用作函数的形参1.创建引用变量
int rats; int & rodents = rats;//引用更接近const指针 int * prodent = &rats;
&不是地址运算符,而是类型标识符的一部分,int &是int的引用,二个变量的地址相同
引用必须在声明的时候初始化,在改变引用时原始的值也会改变,但是地址不会变
2.按引用传递函数参数
允许被调用的函数能够访问调用函数的变量//两种方式都出现一次& void swapr(int & a, int & b) { int temp; temp = a; a = b; b = temp; } swapr(wallet1,wallet2); void swapp(int * p, int * q); swapp(&wallet1, &wallet2);
3.常量引用
const double &ra
形参中使用const能够生成并正确使用临时变量,因此,在不修改参数时,尽可能使用const
4.将引用用于结构
不要返回临时变量的引用或指针struct free_throws { string name; int made; }; void set_pc(free_throws & ft); free_throws & accumulate(free_throws & target, const free_throws & source);
5.将引用用于类对象
将类string、ostream、istream等类对象作为参数6.对象、继承和引用
几类引用可以指向派生类对象,无需进行强制类型转换void file_it(ostream & os,double fo); file_it(cout,a); file_it(fout,b);
7.何时使用引用
对于使用传递的值而不作修改的函数数据很小:内置数据类型、小型结构,按值传递
数组,使用指针(const)
结构,使用const指针或者const引用
类对象,const引用
修改函数中数据的函数
内置数据类型,指针
数组,指针
结构,引用或指针
类对象,引用
三、默认参数
当函数调用中省略实参时自动默认的一个值char * left(const char * str, int n = 1, int j = 5);
要为某个参数设置默认值,必须为他后面所有参数设置默认值实参按从右到左的顺序依次赋给形参
四、函数重载(函数多态)
能够使用多个同名的函数,关键是参数列表,返回值可以相同可以不同,但参数列表必须不同,形参中是否有引用视做同一种unsigned long left(unsigned long num, unsigned ct); char * left(const char* str, int n);
五、函数模板
template<typename AnyType> void Swap(AnyType &a, AnyType &b) { AnyType temp; temp = a; a = b; b = temp; }
关键字template和typename必选,typename可以使用class代替,AnyType一般直接写为T
详情见funtemp.cpp
常见的情形是把模板放在头文件中
1. 重载的模板
template<typename T> void Swap(T *a, T *b, int n); emplate<typename AnyType> void Swap(AnyType &a, AnyType &b);
2. 显示具体化
当模板的使用受限时,例如struct想交换某些特定成员,可以使用显示具体化,当编译器找到与函数调用匹配的具体化定义是,将适用该定义,不再找模板template<> void Swap<job>(job &, job &); // <job可以去掉
非模板>显示具体化>模板
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性