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

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;
}