C++基础语法:返回引用类型

引入

        在C++基础语法:引用&的补充-优快云博客提到了引用类型在函数外是变量,在函数内部是指针.其中赋值细节部分,以及类中使用对象引用对象的差别,返回引用和返回常量做一个理解

引用回顾 

        1.声明引用等于取变量地址;

           引用赋值变量,相当于把引用指向地址的值赋值给变量

           虽然他仍然是"指针",但用起来是看不出来的,所以被当成变量.

int main(void) {
    int a = 10;
    int& a_ref = a;        //声明引用
    int c = a_ref;         //引用赋值变量
    cout << c << endl;
}

         2.将变量传入引用做形参的函数,可以改变原值,起到指针的作用

void plus2(int& a);
int main(void) {
    int a = 10;
    plus2(a);            //改变传入值a
    cout << a << endl;   //原值已改变
}

void plus2(int& a) {     //传入值加2
    a += 2;
}

         

返回引用的条件

        前面说到的"返回引用必须是传入的引用",准确的描述应该是"返回引用必须是已存在的数据",原理和指针是一样的.在类里面声明的数据,也可以返回其引用.例如:

class Any {
	double money;
	double& fun() {
		return money;
	}
};

        这里并没有给fun()传入引用,对于fun()来说,money是本来已存在的数据,所以可以返回其引用.

返回引用和返回变量 

        返回引用相当于返回指针,例如:

#include<iostream>
using namespace std;

class Person {
	int age;
public:
	Person(int ag):age(ag){}
	int getAge() { return age; }
	void setAge(int ag) { age = ag; }
};

class Cont {
//	Person& person;									//引用对象做属性
	Person  person;									//对象做属性,二选一使用
public:
	Cont(Person& per):person(per){}					//构造函数返回引用和返回对象(变量)
	void change(int age) { person.setAge(age); }
	Person getPerson() { return person; };
};

         说明:在构造函数中,传入Person对象,如果返回引用类型Person&,则后面的change影响原对象属性值;如果返回Person类型,则不能影响到原对象属性值.测试代码:

int main(void) {
	Person zs(20);									//生成对象张三
	Cont cont(zs);									//生成包含张三的对象
	cont.change(40);								//cont中改变年龄
//引用做属性影响张三的年龄,对象做属性不影响
	cout << "张三的年龄是:" << zs.getAge() << endl;	
	Person lisi = cont.getPerson();					//生成李四对象
	cout << "李四的年龄是:" << lisi.getAge() << endl;
}

        因为返回引用相当于返回指向zs的指针,而返回对象相当于生成了一个Person类型的新对象,这就是返回引用和返回变量的不同.

小结

        引用在类中的用法.整体来看,引用还是作为"指针"比较容易理解. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jllws1

你的鼓励是我创作的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值