一、友元函数和友元类
1.1为什么要使用友元函数
在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。
实际上具体大概有下面两种情况需要使用友元函数:(1)运算符重载的某些场合需要使用友元。(2)两个类要共享数据的时候。
1.2特点
友元函数在类中只有声明,没有实现,友元函数不是类的内部函数,是一个全局函数
友元函数的声明 不受类的访问控制 限制,可以放在类内部的任意位置
友元函数破坏了类的封装性
1.3声明
friend 用来声明 友元函数:可以访问类的私有成员变量
友元类:
friend也可以用来声明友元类
友元类中所有函数都是该类的友元函数
友员类通常设计为一种对数据操作或类之间传递消息的辅助类
#include <stdio.h>
class Test2_2;
class Test2_1
{
friend void printA(Test2_1 &obj);//声明友元函数
friend Test2_2; //声明友元类
public:
Test2_1 (int a)
{
this->a = a;
}
void print()
{
printf ("a = %d\n", a);
}
private:
int a;
};
class Test2_2
{
public:
void print(Test2_1 &obj)
{
printf ("a = %d\n", obj.a);
}
private:
int a;
};
void printA(Test2_1 &obj)
{
// 私有成员不能访问
printf ("a = %d\n", obj.a);
}
int main2_1()
{
Test2_1 a(10);
a.print();
printA(a);
return 0;
}