1. 友元函数
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。
尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。申明友元函数的语句可以放在类中任意位置。
class A
{
public:
A() : a(100) {}
int GetA() { return this->a; }
friend void SetA(A *p, int a); // 声明一个友元函数, 这个函数是这个类的好朋友, 自己内部的东西对好朋友开放
private:
int a;
};
// 这里提供一个指向A类对象的指针,或者也可以通过其它方法给该函数提供A类对象(任意一个A类对象),以便访问
void SetA(A *p, int a)
{
p->a = a;
}
int main()
{
A mya;
cout << mya.GetA() << endl;
SetA(&mya, 300); //通过友元函数 修改A类的私有属性
cout << mya.GetA() << endl;
return 0;
}
2. 友元类
若申明B类是A类的友员类,即A类中申明B类是自己的好朋友,则B类的所有成员函数都是A类的友员函数,
A类中的所有成员都像好朋友B开放。
友员类通常设计为一种对数据操作或类之间传递消息的辅助类。
class CCar
{
private:
int price;
friend class CDriver; //声明 CDriver 为友元类, 运行其访问自己的成员
};
class CDriver
{
public:
CCar myCar; // 既然想访问对方,自然持有对方的对象(任意一个)
void ModifyCar() // 改装汽车
{
myCar.price += 1000; // 因CDriver是CCar的友元类,故此处可以访问其私有成员
}
};
int main()
{
return 0;
}
最后:无论友元函数还是友元类,都是一个类主动使用friend关键字申明想访问自己成员的其它类或者函数为自己的好朋友,这是一个允许
访问的过程,想去访问的函数或类是没有主动权的。
未完待续。。。。。。