<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的 是不是地址 是就用指针 不是地址就用引用就可以了

posted @ 2018-05-20 16:50  Aaaaaalei  阅读(1372)  评论(0编辑  收藏  举报