zoukankan      html  css  js  c++  java
  • <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的 是不是地址 是就用指针 不是地址就用引用就可以了

  • 相关阅读:
    使用navicat连接mysql报10038错时解决方法
    项目部署之前后端软件部署
    F12调试模式下使用console自动提交
    selenium+python安装配置
    常用dos命令
    jmeter的使用---web测试
    jmeter的安装
    使用JMeter创建数据库(Mysql)测试
    oracle定制定时执行任务
    AWS之Rekognition检测image-text
  • 原文地址:https://www.cnblogs.com/Aaaaaalei0612/p/9063829.html
Copyright © 2011-2022 走看看