面向对象程序设计——引用

目录

引用和指针
​变量和对象
指针应用


​​​​​​​​​​​​​​引用:一个变量或对象的别名。
        引用声明:引用运算符 “&”,一般形式  `
    *数据类型     &变量1   =  变量2;*//变量1是2的别名,2是1的作为引用的目标对象
e.g.  string &zhangsan = Mr.Luo;// 张三是罗老师的另一个名字
意义:同一内存空间的不同名称,对张三的所有操作都是对罗老师的操作。

建议:为提高可读性,分行声明引用、指针、变量。

引用和指针:都可以通过操作引用或指针,来操作所指向的对象
     区别:指针是个变量,可以在程序中改变指针所指向的目标;

int b,c;
​​​​​​​int *a; 
a=&b;
a=&c;

                引用是某个对象声明,引用自身不占内存空间。

#include <iostream>

using namespace std;

int main()
{
    int b=0,c=1;
    int &a=b;
    cout<<sizeof(a)<<endl;
    cout<<sizeof(b)<<endl;
    cout<<sizeof(int &)<<endl;
    cout<<sizeof(long long int &)<<endl;
    return 0;
}

//结果
4
4
4
8
&本身不占空间,sizeof(变量类型 &)即所指向的变量类型的大小


\Rightarrow变量和对象:
变量:通过定义,编译器开辟的一段空间,并赋予名称(内存在代码中可视化的符号,如string zhangsan;  这个名字不占据空间,且空间中存储内容可以改变,只不过在声明的时候人为将二者联系了起来)
对象:内存中一段定义了类型的区域,直接指向内存空间,可以独立存在\Rightarrow传参数时生成临时变量,不能可视化,空间存在

注意:引用必须指向开辟了的空间(变量或对象)
           1)声明引用必须给引用赋初值,且引用不能再指向其他对象。
           2)不能对void进行引用:void语法上作为一个类型,本质上不是数据类型。
           3)不能对数组建立引用 :数组名是数组空间首地址,不是数据类型
                 e.g. int a[10]; int &ra= a;//error
                        int a[10];int &ra =a[0];//ok
           4)没有空引用 int &r = NULL;//error
           5)可以建立指针变量引用

    int i=5;
	int *p= &i;    // 定义指针变量p,指向i 
	int * &t = p;  // t 是指向整形变量的指针变量的引用,初始化为p.

指针应用:1)引用作函数参数传递

#include <iostream>
using namspace std;
void swap ( int &a, int &b )//与传指针效果相同,相比指针需要用取值运算符,可以直接进行值传递
{ 
  int temp;
  temp = a;
  a = b;
  b = temp;
}

void main( )
{ 
  int i=3, j=5;
  swap ( i, j );
  cout<<i<<“,”<<j<<endl;
}

        2)返回引用类型函数

#include <iostream>

using namespace std;
double temp1,temp2,temp3,temp4;
double& f1(double r)
{
    temp1=r*r*3.14;
    return temp1;
}

double &f2(double r)
{
    temp2=r*r*3.14;
    return temp2;
}

double f3(double r)
{
    temp3=r*r*3.14;
    return temp4;
}

double f4(double r)
{
    temp2=r*r*3.14;
    return temp4;
}

int main()
{
    f1(5.0)++;
    ++f2(5.0);
    //f3(5.0)++; //error
    //++f4(5.0); //error
    cout<<"temp1="<<temp1<<endl;
    cout<<"temp2="<<temp2<<endl;
    //cout<<"temp3="<<temp3<<endl;
    //cout<<"temp4="<<temp4<<endl;
    return 1;
}


//函数返回值时,将生成一个临时变量; 函数返回引用时,不可以返回对临时变量的引用,因为临时变量最终被释放掉,引用失去所指向的定义了数据类型的空间。
3)返回引用函数作为左值被调用:调用一个返回引用的函数得到左值,其他返回类型得到右值。


           

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值