<C++> 函数默认参数 函数重载 引用
一.函数默认参数
1.缺省参数:就是在声明函数的某个参数的时候 给他一个默认值
1 #include<iostream> 2 using namespace std; 3 4 void Show(int a = 1,int b = 2,int c = 3) 5 { 6 cout << a << endl; 7 cout << b << endl; 8 cout << c << endl; 9 } 10 11 int main() 12 { 13 Show(); 14 return 0; 15 }
2.函数的参数可以存默认值 在调用的时候就可以不用去传了
但也可以传参 传了就把默认值覆盖 传几个都行 但是第一个不传不可以 因为这是有一种压栈的过程的 后面不传可以
但是在声明函数的时候 前面的默认值可以不给
1 #include<iostream> 2 using namespace std; 3 4 void Show(int a,int b = 2,int c = 3) 5 { 6 cout << a << endl; 7 cout << b << endl; 8 cout << c << endl; 9 } 10 11 int main() 12 { 13 Show(100); 14 return 0; 15 }
3.总结:
默认参数值一定在右边 中间是不可以空缺的
默认参数一定要在声明函数中写
二.函数重载
在同一个作用域中 函数名一样 参数列表不同(即参数个数或类型不同)
根据调用的什么类型的参数 给几个 就会去执行对应的函数
1 #include<iostream> 2 using namespace std; 3 4 void Area(int r) 5 { 6 cout << r*r*3.14 << endl; 7 } 8 9 void Area(int l,int h) 10 { 11 cout << l*h <<endl; 12 } 13 14 int main() 15 { 16 Area(1); 17 Area(1,2); 18 return 0; 19 }
三.引用
1.定义:是C++语言的一个特殊的数据类型的描述 可以理解为“起小名”
用于在程序的不同部分使用两个以上的变量名指定同一地址 这样就使对其中任何一个变量操作都是对同一地址单元进行的
在这种两个以上变量名的关系上 被声明为引用类型的变量名就是实际变量名的别名
注意:定义引用 一定要初始化!!!
2.引用运算符:&
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int a = 100; 6 int& k = a; 7 k = 200; 8 cout << a << endl; 9 10 return 0; 11 }
对引用操作 就是对引用的变量进行操作
引用不是值 不占存储空间 声明引用的时候 目标的存储状态不会改变
一旦引用被初始化 就不能再重新引用其他空间
3.指针和引用的区别:
①引用定义了就要初始化 但是指针不用
②引用初始化后不能再重新引用其他空间 但是指针可以动
③引用没有空的 但是有空指针
引用一定要保证:引用的是一个合法的存储单元
4.引用的优点:空间 效率 安全
5.在使用的时候 如何选择指针和引用:
①如果要装地址 或者有地址偏移的操作 那就用指针(new)
②如果要对单一的空间进行操作 引用就可以
6.“引用”通常作为函数的参数 那么传参的方式可以分为以下三种:
①值传递:
1 #include<iostream> 2 using namespace std; 3 4 void Change(int x,int y) 5 { 6 int temp = x; 7 x = y; 8 y = temp; 9 } 10 11 int main() 12 { 13 int a = 100; 14 int b = 200; 15 Change(a,b); 16 17 cout << a << endl; 18 cout << b << endl; 19 20 return 0; 21 }
交换两数 交换x和y 执行结束空间被回收 a和b没有被交换
②地址传递:
1 #include<iostream> 2 using namespace std; 3 4 void Change(int* x,int* y) 5 { 6 int temp = *x; 7 *x = *y; 8 *y = temp; 9 } 10 11 int main() 12 { 13 int a = 100; 14 int b = 200; 15 Change(&a,&b); 16 17 cout << a << endl; 18 cout << b << endl; 19 20 return 0; 21 }
间接操作所指向的两块空间 a和b交换
③引用传递:
1 #include<iostream> 2 using namespace std; 3 4 void Change(int& x,int& y) 5 { 6 int temp = x; 7 x = y; 8 y = temp; 9 } 10 11 int main() 12 { 13 int a = 100; 14 int b = 200; 15 Change(a,b); 16 17 cout << a << endl; 18 cout << b << endl; 19 20 return 0; 21 }
对x和y操作就是对a和b进行操作 a和b成功交换 (PS:码到这里真的觉得引用真的好方便阿~)
7.总结:空间变量是看生命周期去选的 要控制生命周期就要选堆区
可以看是否要修改传入的内容 不改就用值传递 改就用地址或者引用
接着看传进来的是不是new的 是不是地址 是就用指针 不是地址就用引用就可以了