首页 > 代码库 > c++第六章-(友元)

c++第六章-(友元)

1.友元(激情四射的机油)

友元关系:是不同类间的一种特殊关系,这种特殊关系允许友元类访问对方的protected和private方法和属性。

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;//定义友元,交友了,所以可以访问Lover->name};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;};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;}/** * *构造器 */Lovers::Lovers(std::string theName){    name = theName;}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){    //lover->name是受保护的,不是Lover的子类根本使用不了的。(友元就解决的该问题了)    std::cout << name << "亲一下"    << lover->name << std::endl;}int main(int argc, const char * argv[]){    Boyfriend boyfriend("A君");    Girlfriend girlfriend("B妞");        Others others("路人甲");        girlfriend.kiss(&boyfriend);    girlfriend.ask(&boyfriend,"洗衣服啦");        std::cout << "\n当当当当!传说中的路人甲登场.........\n";    others.kiss(&girlfriend);            return 0;}

控制台返回的结果:

B妞亲亲我们家的A君宝贝儿A君帮我洗衣服啦当当当当!传说中的路人甲登场.........路人甲亲一下B妞