【C++】【学习笔记】【020】友元

来源:互联网 发布:电脑上淘宝怎么看直播 编辑:程序博客网 时间:2024/05/07 23:53
1、有些时候,一个完全无关的类由于某些特殊的原因需要访问某个protected成员,甚至某个private成员,这就引入了友元的概念;
2、友元关系是类之间的一种特殊关系,这种关系不仅允许友元类访问对方的public方法和属性,还允许友元访问对方的protected和private方法和属性;
3、声明一个友元关系的语法很简单,只要在类声明里的某个地方加上friend class **就行了,这条语句可以放在任何地方,放在public、protected、private段落里都可以;

样例:友元使用方法

#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; // 交友不慎};Lovers::Lovers(std::string theName){    name = theName;}void Lovers::kiss(Lovers *lover){    std::cout << name << " Lovers::kiss() " << lover->name << std::endl;}void Lovers::ask(Lovers *lover, std::string something){    std::cout << name << " Lovers::ask() " << lover->name << something << std::endl;}class Boyfriend : public Lovers{public:    Boyfriend(std::string theName);};Boyfriend::Boyfriend(std::string theName) : Lovers(theName){}class Girlfriend : public Lovers{public:    Girlfriend(std::string theName);};Girlfriend::Girlfriend(std::string theName) : Lovers(theName){}class Others{public:    Others(std::string theName);    void kiss2(Lovers *lover);protected:    std::string name;};Others::Others(std::string theName){    name = theName;}void Others::kiss2(Lovers *lover){    std::cout << name << " Others::kiss2() " << lover->name << std::endl;}int main(){    Boyfriend boyfriend("BOY");    Girlfriend girlfriend("GIRL");    Others others("OTHER");    girlfriend.kiss(&boyfriend);    girlfriend.ask(&boyfriend, " Wash clothes.");    std::cout << "OTHER is coming." << std::endl;    others.kiss2(&girlfriend);    return 0;}
输出:GIRL Lovers::kiss() BOYGIRL Lovers::ask() BOY Wash clothes.OTHER is coming.OTHER Others::kiss2() GIRL


0 0
原创粉丝点击