美文网首页
C++基础(引用和函数的高级算法)

C++基础(引用和函数的高级算法)

作者: I踏雪寻梅 | 来源:发表于2016-11-07 20:59 被阅读0次

    C++基础

    引用和函数的高级算法

    课程目标

    • 引用的优点和使用方法
    • 引用函数,内联函数,默认参数函数,递归函数。

    引用

    • 引用一定要初始化,他就维系在一定的目标上,再也不分开。
    #include <iostream>
    int main(int argc,char *argv[])
    {
        int intone=5;
        int &rint=intone;
        int inttwo=6;
        rin t=inttwo;
        std::cout<<"intone="<<intone<<std::endl;
        std::cout<<"rint="<<rint<<std::endl;
        rint=10;
        std::cout<<"intone="<<intone<<std::endl;
        std::cout<<"rint="<<rint<<std::endl;
        std::cout<<"&intone="<<&intone<<std::endl;
        std::cout<<"&rint="<<&rint<<std::endl;
    }
    
    • 引用的别名和初始化
      1. 引用是个别名
      2. 引用的初始化
      3. 引用作为目标的别名而使用,对引用的改动实际就是对目标的改动。
      4. 为了建立引用,先写上目标的类型,再加上引用运算符”&”,然后是引用的名字。
      5. 引用能引用任何合法变量名
      int*a:
      int*&P=a://表示int*的引用P初始化为a
      int b=8;
      P=&b://0k,P是a的别名,是一个指针
    
    • 引用与指针有很大差别:
      • &只有在声明引用时是引用操作符,其他时候都是地址操作符
    • C++没有提供访问地址的办法。
    • 若一个变量声明为T&,即引用时要用T的变量或对象,或能够转成T类型对象进行初始化。
    const double&rr=1;
    
    - 先做必要的类型转换
    - 将结果至于临时变量
    - 将临时变量的地址作为初始的值
    
    • 不能进行引用
      • 对void进行引用是不允许的。
      void &a=3
      
      • 不能建立引用的数组
      int a[10];
      int &ra[10]=a;
      
      • 没有引用的指针和引用的引用
      int a;
      int& ra=a;
      int& *p=&ra; //error企图定义一个引用的指针
      
      • 引用不能用的类型来初始化
      int &ri=NULL;
      int &ri=int;
      
    • 函数的指针与引用
    #include <iostream>
    using namespace std;
    void swap(int &a,int &b)
    {
        int temp;
        temp=a;
        a=b;
        b=temp;
    }
    int main()
    {
        int x=10,y=20;
        swap(x,y);
        cout<<"x="<<x<<endl;
        cout<<"y="<<y<<endl;
    }
    
    • 如果把引用作为返回值,他也不能把局部变量的地址返回出来
    #include <iostream>
    int &test()
    {
        int temp=12;
        return temp;
    }
    int main()
    {
        int &x=test();
        std::cout<<"x="<<x<<std::endl;
    }
    - temp的生命周期仅局限于&test函数的},结果会被释放。
    - 函数会报警告,但是最后的结果也可以显示12,因为系统内部产生一个临时变量,存储temp值。
    - 用static int temp就不会出现警告。
    
    • 引用存在问题
    int a=5,b=6;
    swap(a,b);//会不清楚到底是引用还是传参。
    
    • 使用引用作为参数和返回值给函数的意义
      • 函数只能返回一个值,
      • 解决问题的方法是传递两个参数。
    #include<iostream>
    using namespace std;
    double& fn(const double& pd) //const作为参数                   
    {
        static double ad=3;
        ad+=pd;
        cout<<"fn being called..the value is:"<<pd<<endl;
        return ad;
    }
    int main()
    {
        double a=3.6;
        double& pa=fn(a);
        cout <<pa <<endl;
        a=5.4;
        pa = fn(a);
        cout <<pa <<endl;
        return 0;
    }
    //6.6  12
    
    • 引用总结:
      1. 引用可以提高程序的可读性
      2. 在大对象时,引用可以提高效率
      3. 引用可以变相增加函数的返回值
      4. 数组不可以引用
      5. 避免返回局部变量的引用
      6. 可以返回结构的引用

    相关文章

      网友评论

          本文标题:C++基础(引用和函数的高级算法)

          本文链接:https://www.haomeiwen.com/subject/mnnouttx.html