友元函数

本文介绍了两种使用友元函数的有效场景:一是用于比较不同类之间的大小,提高代码效率;二是通过友元函数重载操作符,使代码更简洁易读。

在大多是的时候,大家都说一般情况下不要使用友元函数,因为它破坏了类的封装,但是有时候用友元函数也是一种不错的选择。

1,当需要比较两个不同类的大小(肯定是比较类的一个成员变量),这个时候就需要用友元函数效率就比较高,代码如下:

class B; //class B implement

class A
{
private:

int x;
public:
A(int n)
{
x = n;
}
friend int check(A a, B b);
};

class B
{
private:
int x;

public:
B(int n)
{
x = n;
}
friend int check(A a, B b);
};

int check(A a, B b)
{
return a.x > b.x;
}
int _tmain(int argc, _TCHAR* argv[])
{
A a(5);
B b(8);
printf("%d", check(a, b));
getchar();
return 0;
}

如果不用友元函数就需要两个函数来实现两个不同的类的比较,这样效率和代码空间就比较低。

注:在友元函数,放在public,protected,private修饰符下是无差别的。


2,另外一种使用的地方就用友元来重载操作符。还是上面的例子,代码如下:

class B; //class B implement

class A
{
private:
int x;
public:
A(int n)
{
x = n;
}
friend bool operator > (A a, B b);
};

class B
{
private:
int x;

public:
B(int n)
{
x = n;
}
friend bool operator > (A a, B b);
};

bool operator >(A a, B b)
{
return a.x > b.x;
}
int _tmain(int argc, _TCHAR* argv[])
{
A a(5);
B b(8);
if(a > b) printf("a > b\n");
else printf("a < b\n");
getchar();
return 0;
}

 

转载于:https://www.cnblogs.com/endeavour/archive/2011/11/21/2257774.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值