• 【C++进阶】引用 & 函数提高


    一 、引用

    1.1 引用的基本使用

    作用:给变量起别名

    语法:数据类型 & 别名=原名

    示例:

    	int a = 10;
    	int & b = a;
    	cout <<"b= "<< b << endl;
    	b = 20;
    	cout << "a = " << a << endl;
    
    '''输出''
        b= 1
        a = 20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1.2 引用的注意事项
    • 引用必须要初识化: 错误写法:int &b;
    • 引用一旦初始化化就不可以更改了,即b是a的别名,就不能是c的别名了
    1.3 引用做函数参数

    作用:函数传参时,可以利用引用的技术让形参修饰实参

    优点:简化指针修改实参

    using namespace std;
    // 交换函数
    
    // 1、值传递
    void mySwap01(int a, int b)
    {
    	int tamp;
    	tamp = a;
    	a = b;
    	b = tamp;
    	cout << "mySwap01—a= " << a << endl;
    	cout << "mySwap01—b= " << b << endl;
    }
    
    //2、地址传递
    
    void mySwap02(int *a, int *b)
    {
    	int tamp;
    	tamp = *a;
    	*a = *b;
    	*b = tamp;
    }
    
    //3、引用传递
    void mySwap03(int &bei_a, int &bei_b)
    {
    	int tamp;
    	tamp = bei_a;
    	bei_a = bei_b;
    	bei_b = tamp;
    	cout << "bei_a=" << bei_a << endl;
    }
    int main()
    {
    	system("color 1E");
    	
    	int a = 10;
    	int b = 20;
    	//mySwap01(a, b); //值传递,形参不会影响实参
    	//mySwap02(&a, &b); //地址传递,形参会修改实参的值
    	mySwap03(a, b); //引用传递,形参也会修饰实参
    
    	cout << "a= " << a << endl;
    	cout << "b= " << b << endl;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    在这里插入图片描述

    1.4 引用的本质 :指针的常量

    所有的指针操作都有编译器执行

    system("color 1E");
    	int a = 10;
    	int & ref = a;
    	cout << "a = " << a << endl;
    	ref = 20;
    	cout << "a = " << a << endl;
    	cout << "ref = " << ref << endl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    1.5 常量引用

    作用:修饰形参,防止误操作

    void showValue(const int &val)
    {
    	//val = 1000;//在打印的函数修改数据,则原a的值也修改了 
    	/*
    		在函数上加const,则不能修改	
    	*/
    	cout << " val = " << val << endl;
    }
    int main()
    {
    	system("color 1E");
    	//防止误操作
    	int a = 10;
    	//const:编译器将代码修改临时的值,int temp=10;const int & ref=temp ->const & ref=10;加入const只能读,不能修改
    	showValue(a);
    	system("pause");	
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    二、函数提高

    1 函数默认参数

    函数的形参列表的形参是可以有默认值的。

    语法:返回值类型 函数名 (参数=默认值){ }

    注意:

    • 如果某个位置已经有默认参数,那么从这个位置之后,都必须有默认值
    • 如果函数的声明有默认参数,函数的实现就不能有默认参数.实现声明只能有一个默认参数(函数的声明int func(int a=10, int b=20)
    //函数的默认参数
    //如果我们自己传入数据,就用自己的数据,如果没有,就用默认值
    //返回值类型 函数名 (参数=默认值){ }
    int func(int a, int b=20, int c=30)
    {
    	return a + b + c;
    }
    int main()
    {
    	system("color 1E");
    	cout << "a+b+c = " << func(10,30) << endl;
    	system("pause");	
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    2 函数占位参数

    作用:形参列表可以有占位参数,用来做占位,调用函数时必须填补该位置

    语法:返回值类型 函数名 (数据类型){ } --------》现阶段了解

    //函数的占位参数
    
    //返回值类型 函数名 (数据类型){ }
    void func(int a ,int)
    {
    	cout << "this is  func" << endl;
    }
    int main()
    {
    	system("color 1E");
    	func(10,2);
    	system("pause");	
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    3 函数重载

    作用:函数名可以相同,提高复用性

    函数重载满足条件:

    • 同一作用域下
    • 函数名称相同
    • 函数参数类型不同 或者 个数不同 或者 顺序不同

    注意:
    函数的返回值类型(void\int)不可以作为函数重载的条件

    void func()
    {
    	cout << "func的调用" << endl;
    }
    void func(int a)
    {
    	cout << "func的调用—int" << endl;
    }
    void func(double a)
    {
    	cout << "func的调用—double" << endl;
    }
    int main()
    {
    	system("color 1E");
    	func(0.2);
    	func();
    	func(2); 
    	system("pause");	
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    CV_8UC1,CV_8UC2,CV_8UC3
    【微信小程序系列:五】小程序适老化自动适配工具miniprogram-elder-transform---微信老年关怀模式下小程序字体适配微信字体
    springboot - 手写spring mvc
    Python---多态
    软件测试之性能测试面试题合集(含答案分析细节)
    解锁各种js数组骚操作,总有你想要的!
    ADP出席第六届进博会跨境人才服务论坛|薪酬管理数字化加合规性,为跨境企业提升成本效率助长信心
    2022.8.8考试摄像师老马(photographer)题解
    JAVA坝上长尾鸡养殖管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
    kafka—分区的分配和再平衡
  • 原文地址:https://blog.csdn.net/qq_44859533/article/details/128196901