Five 友元

1:友元概述:友元是一种定义在类外部的普通函数,或类,但他需要在类体内进行说明,为了与该类的成员函数加以区别,在说明前要加上关键词 friend。

友元不是成员函数,但是他可以访问类中的私有成员。

使用friend 关键词可以让特定的函数或者别人类的所有成员函数对私有数据成员进行读写。这既可以保证数据的私有性,又能使特定的类或函数直接访问私有数据。

关于友元的定义,其实若是通俗来说,相当于  数据自身将自己封闭起来,不允许他人访问,但总有人是特别的,就是自己的朋友,朋友可以去访问自己。(相当于孤单的时候会去找朋友玩)

2:接下来是三个函数,来详细去区分友元已经成员函数 的区别

class Complex
{
public:
	Complex(double r = 0,double i = 0)
		: re(r),im(i)
	{}
	double Getre() const { return re; }
	double Getim() const { return im; }
	//one
	friend int func(const Complex& proga)
	{
		return proga.re + proga.im;
	}
	//two
	int func2(const Complex& proga)
	{
		return proga.Getre() + proga.Getim();
	}	
	//three
	int func3(const Complex& proga)
	{
		return proga.re + proga.im;
	}
private:
	double re, im;
};

int main()
{
	int a = 0;
	Complex c1(2, 1);
	Complex c2;
	a = func(c1);
	a = c2.func2(c1);
	a = c2.func3(c1);
	return 0;
}

①:第一个函数是使用了友元,在友元函数当中,可以直接去取proga 复数的实部跟虚部。(我并没有将func在类外定义)。注意在使用func的时候,直接调用该函数即可。

②:第二个函数是使用了成员函数,然后在成员函数当中,再调用成员函数获取自己的实部已经虚部,并将和返回。

③:第三个函数就略显特别了,因为这个函数相当于直接去取了proga的实部 虚部,相当于我创建了三个复数,却可以拿第一个复数去对第三个复数的值进行获取,或许这显然违背了private的原则,但显然不是。相同class中的objects 互为友元(friend)看到这句话,你也就明白了什么。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值