二、C++学习_函数(带C语言基础)
函数分类
内置函数:STL 和 Boost C++
自定义函数:
自定义函数
void function(int &num); //num 引用,类似指针传值
//调用
function(num);
//二维数组
void show(int (*ptr)[5]);
void show(int ptr[][5]);
- 函数指针和指针函数
略
函数进阶
- 内联函数(inline)
是为了提高运行速度做出的改进,与常规函数的区别不在于编写方式;而在于被调用时的运行机制不同。
inline void func1();
//常规函数是通过地址找到代码段进而执行程序
//内联函数是通过类似宏定义的方式将整段代码替换到调用位置
//内联函数解决了函数宏不检查数据类型和整体替换可能带来的隐藏问题
//inline添加在函数声明或定义之前 任选其一
- 引用(referencce)
为对象起了另一个名字(引用即别名),本质上还是指针,内部封装。
int int_value = 1024;
//refValue指向int_value,是int_value的另一个名字
int &refValue = int_value;//引用必须被初始化
const int& value = 100;//指向常量的引用
//函数使用引用参数
void fan(int &i) {
i = 222;
cout << i <<endl;
}
//不要使用 返回引用类型的函数
int &sum(){
int num;
//注意:rNum是在sum()函数中定义的,所以叫局部变量
//rNum的生存期只在sum()函数中!
int &rNum = num;
//函数中的局部变量会被内存回收
return rNum;//返回了局部引用变量 这里的用法是错误的
}
//函数可以不返回值,默认返回传入的引用对象本身
使用引用参数的一些指导原则
1 能够修改调用函数中的数据对象
2 数据对象较大时传递引用可以提高程序的运行效率
数据对象很小,建议直接传值;
传递数组只能使用指针,并使用const修饰;
较大对象则使用const指针或引用以提高程序运行效率。
是基本类型或结构时,可以使用指针或引用(基本类型建议使用指针);
数据对象是类对象时,要求使用引用。
- 默认参数
void sample(int = 10);
//默认值可以在函数原型或定义中给出,但不能同时给出;
//对于参数列表函数,必须从右向左添加默认值
函数重载
可以有多个同名函数
函数名相同参数列表不同
重载不理会 const 和 & 标记
函数模板
所谓函数模板,实际上就是建立一个通用函数。
函数定义时不指定具体的数据类型(使用虚拟类型替代);
函数调用时编译器根据实参反推数据类型-类型的参数化。
//模板头与函数声明/定义永远是不可分割的整体
template <typename 类型参数1, typename 类型参数2, ...>
返回值类型 函数名(形参列表){
//在函数体中可以使用类型参数
}
//例
//函数声明
template <typename T> void Swap(T&, T&);
/**
* 使用模板技术实现变量交换值
*/
template <typename T> //模板头
void Swap(T &a, T &b){
T temp = a;
a = b;
b = temp;
}