zoukankan      html  css  js  c++  java
  • 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 << "
    当当当当!传说中的路人甲登场.........
    ";
        others.kiss(&girlfriend);
        
        
        return 0;
    }

    控制台返回的结果:

    B妞亲亲我们家的A君
    宝贝儿A君帮我洗衣服啦
    
    当当当当!传说中的路人甲登场.........
    路人甲亲一下B妞
  • 相关阅读:
    PHP 5.5.0 Alpha5 发布
    Ubuntu Touch 只是另一个 Android 皮肤?
    MariaDB 10 已经为动态列提供文档说明
    Percona Toolkit 2.1.9 发布,MySQL 管理工具
    Oracle Linux 6.4 发布
    Ruby 2.0.0 首个稳定版本(p0)发布
    Apache Pig 0.11.0 发布,大规模数据分析
    Node.js 0.8.21 稳定版发布
    红薯 MySQL 5.5 和 5.6 默认参数值的差异
    Django 1.5 正式版发布,支持 Python 3
  • 原文地址:https://www.cnblogs.com/huen/p/3822224.html
Copyright © 2011-2022 走看看