Part 5
一 友元关系
1.在编程中我们通过 public, protected 和 private 这些访问级别可以让程序员控制谁有权使用某个类里的某个方法和属性。这个强大的方案可以把代码的实现细节掩藏起来,不让没有相应权限的其他代码访问到。
可是在某些场合,一个完全无关的类由于某些特殊原因需要访问到某个 protected 成员,甚至某个 private 成员,那该怎么办呢?
有些朋友可能会说,那就把所有的东西都声明成 public 吧。这样固然可以,但这样不就把原来我们想方设法要保护的方法或属性又暴漏了吗?!
由于这种特殊且尴尬的矛盾存在,C++ 的发明者为此准备了一个解决方案:友元关系。
友元关系是类之间的一个钟特殊关系,这种关系不仅允许友元类访问对方的 public 方法和属性,还允许友元访问对方的 protected 和 private 方法和属性。
声明一个友元关系的语法很简单,只要在类声明里的某个地方加上一条 friend class ** 就行了。
注:这条语句可以放在任何地方,放在 public, protected, private 段落里都可以。
题目:”朋友”之妻不可亲(为了防止过大尺度遭到和谐,小甲鱼放弃了很多设想好的惊心动魄的方法,改为尺度较小的 kiss() )
题目
Lovers 类有两个子类:分别为 Boyfriend 类和Girlfriend 类。
Lovers 类有情人应有的方法 kiss(), ask() 等。
另增加第三者 Others 类作为路人甲代表,Others 类图谋不轨想要 kiss() Girlfriend 类的对象,我们要帮助他实现愿望!
Eg
#include <iostream>
#include <string>
class Lovers
{
public:
Lovers(std::string theName);
void kiss(Lovers *lover);
void ask(Lovers *lover, std::string something);
protected:
std::string name;
friend class Others; // 祸根,交友不慎。。。。。。
};
class Boyfriend : public Lovers
{
public://子类一样有public:!!
Boyfriend(std::string theName);
};
class Girlfriend : public Lovers