小甲鱼-C++快速入门笔记(21)之友元关系

定义:

友元关系是类之间的一种特殊关系,这种关系不仅允许友元类访问对方的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;
}

猜你喜欢

转载自blog.csdn.net/qq_30708445/article/details/88659757
今日推荐