【听说有人想转码】面向对象--返回引用类型的成员函数

这是关于“返回引用类型的成员函数(可以返回私有数据成员的引用) ”的内容

老师课上的PPT(随便扫两眼就行啦)

class A{
	float  x,y;
public:
	float &Getx(void )  {   return  x;   } 	//返回x的引用
	void Set(float a,float b) {    x=a;   y=b;   }
	void Print(void) {   cout<<x<<'\t'<<y<<endl;   }
};

void main(void)
{	A  a1,a2;
	a1.Set (3,5);
	cout<<"a1:  ";   	a1.Print ();
	a1.Getx()=30;      //将a1对象中的x成员赋值
	cout<<"changed  a1: ";
	a1.Print ();
}

类中出现float &Getx(...){...},

在类外使用时是a1.Getx()=30。

这边相差了一个&。

为了方便理解,上例子进行比较。

#include <iostream>
using namespace std;
class A
{
public:
	int a;
	
	int &geta() { return a; }
};

int main()
{
	A n;
	n.geta() = 2;
	cout << n.geta();
}

输出:2

#include <iostream>
using namespace std;
class A
{
public:
	int a;
	
	int &geta() { return a; }
};

int main()
{
	A n;
	n.&geta() = 2;
	cout << n.geta();
}

结果:n.&geta() = 2;语法错误,应输成员名。可见&并不包含于成员名中。

#include <iostream>
using namespace std;
class A
{
public:
	int a;
	
	int geta() { return a; }
};

int main()
{
	A n;
	n.geta() = 2;
	cout << n.geta();
}

结果:n.geta() = 2;语法错误。表达式必须是可修改的左值。

下面来进一步了解这两种函数

#include <iostream>
using namespace std;
class A
{
public:
	int a;
	
	int &geta() { return a; }
};

int main()
{
	A n;
	n.geta() = 2;
	cout << &(n.geta());
}

输出:000000BD1FD6F904

(就是地址啦)

#include <iostream>
using namespace std;
class A
{
public:
	int a;
	
	int geta() { return a; }
};

int main()
{
	A n;
	
	cout << &(n.geta());
}

结果:最后一行报错,因为它不是左值(左值,赋值符号左侧的变量,有自己的地址)

#include <iostream>
using namespace std;
class A
{
public:
	int a;
	
	int geta() { return a; }
};

int main()
{
	A n;
	
	cout << (n.geta());
}

输出:-858993460

(系统自动给a赋的值啦)

To conclude

int geta() { return a; }和int &geta() { return a; }差别在于后者是引用,前者仅是告诉你a的值是多少,而后者可以让你对a进行操作,例如给a赋值,取a的地址。

用int geta() { return a; },我可以把n.geta()看成一个数,比如,把它看成2。用int &geta() { return a; },我可以把n.geta()看成a,这个a是对象n中的a。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值