1. 程式人生 > >C++快速入門---友元關係(14)

C++快速入門---友元關係(14)

C++快速入門---友元關係(14)

 

友元關係是類之間的一種關係。

這種關係不僅允許友元類訪問對方的public方法和屬性,還允許友元訪問對方的protected和private方法和屬性。

 

程式碼如下:

others不是lovers的子類,在others::kiss()訪問不了屬性name。因為在基類Lovers和Others類,定義了一種友元關係。

#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:
	Boyfriend(std::string theName);
};

class Girlfriend : public Lovers
{
public:
	Girlfriend(std::string theName);
};

//路人甲 
class Others
{
public:
	Others(std::string theName);
	void kiss(Lovers *lover);
	
protected:
	std::string name;
};

Lovers::Lovers(std::string theName)
{
	name = theName;
}

void Lovers::kiss(Lovers *lover)
{
	std::cout << name << "親親我們家的" << lover->name << std::endl;
}

void Lovers::ask(Lovers *lover, std::string something)
{
	std::cout << "寶貝兒" << lover->name << "愛我" << something << std::endl;
}

Boyfriend::Boyfriend(std::string theName) : Lovers(theName)
{
}

Girlfriend::Girlfriend(std::string theName) : Lovers(theName)
{
}

Others::Others(std::string theName)
{
	name = theName;
}

void Others::kiss(Lovers *lover)
{
	std::cout << name << "親一下" << lover->name << std::endl;
}

int main()
{
	Boyfriend boyfriend("A君");
	Girlfriend girlfriend("B妞");
	
	Others others("路人甲");
	
	girlfriend.kiss(&boyfriend);
	girlfriend.ask(&boyfriend, "洗衣服啦");
	
	std::cout << "\n噹噹噹當! 傳說中的路人甲登場。。。。。。\n";
	others.kiss(&girlfriend);
	
	return 0;
}