定义:
友元关系是类之间的一种特殊关系,这种关系不仅允许友元类访问对方的public方法和属性,还允许友元访问对方的protected和private方法和属性。
声明方式:
声明一个友元关系的语法很简单,只要在类声明里的某个地方加上一条friends class ** 就行了。
注意:这条语句可以放在任何地方,放在public,protected,private段落里都可以。
练习:
题目:
----Lovers类有两个子类:分别为Boyfriend类和Girlfriend类;
----Lovers类是有情人应有的方法kiss(), ask()等;
----另增加第三类Others类作为路人甲的代表;
----Others类调用kiss()方法
#include <iostream>
#include <string>
using namespace std;
class Lovers
{
public:
Lovers(string theName); //构造函数
void kiss(Lovers *lover);
void ask(Lovers *lover, string something);
protected:
string name;
friend class Others;
};
class Boyfriend:public Lovers //子类
{
public:
Boyfriend(string theName);
};
class Girlfriend:public Lovers //子类
{
public:
Girlfriend(string theName);
};
class Others //友元类
{
public:
Others(string theName);
void kiss(Lovers *lover);
protected:
string name;
};
Lovers::Lovers(string theName)
{
name = theName;
}
void Lovers::kiss(Lovers *lover)
{
cout << name << "亲亲我们家的" << lover->name << endl;
}
void Lovers::ask(Lovers *lover, string something)
{
cout << "宝贝儿" << lover->name << "帮我" << something << endl;
}
Boyfriend::Boyfriend(string theName):Lovers(theName)
{
}
Girlfriend::Girlfriend(string theName):Lovers(theName)
{
}
Others::Others(string theName)
{
name = theName;
}
void Others::kiss(Lovers *lover)
{
cout << name << "亲一下" << lover->name << endl;
}
int main()
{
Boyfriend boyfriend("A君");
Girlfriend girlfriend("B妞");
Others others("路人甲");
girlfriend.kiss(&boyfriend);
girlfriend.ask(&boyfriend, "洗衣服啦");
cout << "\n当当当当! 传说中的路人甲登场.....\n";
others.kiss(&girlfriend);
return 0;
}