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

原文地址:https://www.cnblogs.com/Aaaaaalei0612/p/9063829.html

时间: 2024-12-08 05:37:00

<C++> 函数默认参数 函数重载 引用的相关文章

【C/C++学院】0813-C与CPP不同以及命名空间简介/函数重载与函数默认参数/泛型auto/Newdelete

C与CPP不同以及命名空间简介 命名空间在软件设计中的作用就是为了实现迭代式开发. 命名空间的别名 #include <iostream> namespace runrunrunrun { int a(10); char *str("gogogo"); namespace run //命名空间的嵌套 { int a(9); } } namespace runrunrunrun //命名空间的拓展 { int y(5); //int a(15);重定义错误 } namespa

默认参数函数,引用

一:默认参数函数 #include <iostream> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void test(int sum = 0) //函数的定义 { cout<<"默认参数sum="<<sum<<endl

为什么赋值操作符函数的参数为const引用,返回值为引用

为什么赋值操作符函数的参数为const引用,返回值为引用 1.返回值类型 返回类型一般声明为类型的引用,并在函数结尾时返回实例自身的引用(即*this).这里主要有两个原因:(1)返回引用可以减少一次拷贝构造和析构函数导致不必要的开销,因为返回值类型不是引用,会创建一个匿名对象,这个匿名对象时个右值,获取return的值.(2)可以实现连续赋值 在例子中 b=c=a; 返回值不是引用类型也是可以的,其运算顺序 b=(c=a); c得到一个右值,再将右值赋给b,所以逻辑上没有问题的.但是如果是 (

C++函数默认参数(转)

在代码中使用到了函数的默认参数,在函数的定义和实现中都填写的默认参数,结果出现了错误: 代码: 1 #ifndef FIRSTPAGE_H 2 #define FIRSTPAGE_H 3 4 #include <QWizardPage> 5 #include "ui_firstdialog.h" 6 7 class FirstPage : public Ui::FirstDialog, public QWizardPage 8 { 9 public: 10 FirstPag

Swift 2.0学习笔记(Day 20)——函数中参数的传递引用

原创文章,欢迎转载.转载请注明:关东升的博客 参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以引用方式传递,这也是可以实现的,Swift提供的inout关键字就可以实现.看下面的一个示例: func increment(inout value:Double, amount:Double = 1.0) { value += amount } var value : Double = 10.0

《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用

原创文章,欢迎转载.转载请注明:关东升的博客 参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以引用方式传递,这也是可以实现的,Swift提供的inout关键字就可以实现.看下面的一个示例: func increment(inoutvalue:Double, amount:Double = 1.0) {     value += amount }   var value : Double = 

ES6新特性(函数默认参数,箭头函数)

ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式:   从上面的代码可以看出存在一个问题,当传入的参数为0或者false时,会直接取到后面的值,而不是传入的这个参数值. 那怎么解决呢?对于上图的代码,可以通过判断是否传入了num参数,没有就用默认值:   这种做法还是很麻烦的,而ES6则直接在参数定义里面设置函数参数的默认值,而且不用担心传入参数是0或者false会出错了: 2.箭头函数 箭头函数用 =>

C/C++ Python的函数默认参数

发现C/C++  Python的函数可以使用默认参数,来减少传参时候的参数个数. 但是:这样的默认参数最好是不变对象! #include <stdio.h> #include <string.h> void func_1(int id, char s[], char city[] = "Bejing") { printf("%d, %s, %s",id, s, city); } int main() { func_1(1, "李金旭

python 函数默认参数的小坑

默认参数和可变对象 在执行def语句时,默认参数的值只被解析并保存一次,而不是每次在调用函数的时候.这通常是你想要的那样,但是因为默认值需要在每次调用时都保持同样对象,你在试图改变可变的默认值(mutable defaults)的时候可要小心了.例如,下面的函数中使用一个空的列表作为默认值,然后在之后每一次函数调用的时候改变它的值: 1 2 3 4 5 6 7 8 9 10 11 12 >>> def saver(x=[]):   # 保存一个列表对象 ...     x.append(