cpp类的引用

引用

引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符 &引用名=目标变量名
  引用说明:
  (1)&在此不是求地址运算,而是起标识作用
  (2)类型标识符是指目标变量的类型。
  (3)声明引用时,必须同时对其进行初始化。
  (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
           int a=2,int &ra=a;
          a为目标原名称,ra为目标引用名。给ra赋值:ra=1; 等价于 a=1;

int main ()
{
	int a = 2;
	cout << a << endl;
	int &b = a;
	int &c(a);
	cout << b << endl;
	cout << c << endl;
	b = 1;
	cout << b << endl;
	cout << c << endl;
}

输出:
2
2
2
1
1


  (5)对引用求地址,就是对目标变量求地址。&ra与&a相等。即我们常说引用名是目标变量名的一个别名。别名一词好像是说引用不占据任何内存空间。但是编译器在一般将其实现为const指针,即指向位置不可变的指针。即引用实际上与一般指针同样占用内存。
  (6)不能建立引用的数组。因为数组是一个由若干个元素所组成的集合,所以无法建立一个由引用组成的集合。但是可以建立数组的引用.
  例如: int& ref [3]= {2,3,5};//声明ref引用的数组错误
  但是可以这样写:
  const int (&ref)[3] ={2,3,5}; //gcc编译的时候加上选项 -std=c++0x
  ref[0] = 35; //错误
  为什么要加上const ,因为{2,3,5}此时是个字面值数组,是保存在代码段里,只读的属性,如果不加,编译错误,而且后面对ref[0]的赋值也不会成功.

int main ()
{
	int a[2] = {1,2};
	cout << a[0] << " " << a[1] << endl;
	
	const int (&b)[2] = a;
	cout << b[0] << " " << b[1] << endl;
//	b[0] = 2;  赋值失败,简单理解为const
	a[0] = 3;
	cout << a[0] << endl << b[0];
}

输出:
1 2
1 2 
3 
3


  需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词。

 

 

class Base
{
public:
	void show()
	{
		cout << "father A\n";
	}	 
		
};

class De:public Base
{
public:
	void show ()
	{
		cout << "son B\n";
	}		
};


指针
int main ()
{
	Base *a;
	De b;
	
	a = &b;
	a->show();   //指针只能用-> 
	return 0;
}


引用
int main ()
{
	De b;
	Base &a = b;  //Base a = b;
	a.show();   
	return 0;
}


输出:
father A

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值