zoukankan      html  css  js  c++  java
  • C++:友元函数、友元类

    友元意义:在类的外部定义的函数或类可以访问其类内部的私有、公有变量。

    实际操作(用《C++ Primer plus》范例):

     1友元函数

    友元函数使用就是在类中声明,然后外边定义。但其实这个函数并不属于这个类。

    //一个电视机类
    class CTV
    {
    public:
        CTV();
        friend void SetOn( CTV & pC);//友元函数
        friend void SetOff(CTV & pC);//友元函数
        void SetbOnOff();
    private:
        enum { on = true, off = false };
        bool bOnOff;
    };
    
    CTV::CTV()
        :bOnOff(false)
    {
    }
    
    //友元函数再类中声明过后可以访问类的私有变量
    void SetOn(CTV & pC)
    {
        pC.bOnOff = pC.on;
    }
    void SetOff(CTV & pC)
    {
        pC.bOnOff = pC.off;
    }
    //使用
    int main()
    {
        CTV aTV;
        SetOn(aTV);
        SetOff(aTV);
        CRemote aRemote(aTV);
        aRemote.SetOn();
    }

    2友元类

    可以看到这里在构造这个类时引入了CTV这个类,我认为这是在实际应用中常用方法。

    //一个电视机类
    class CTV
    {
    public:
        CTV();
        friend class CRemote;//友元类
        void SetbOnOff();
    private:
        enum { on = true, off = false };
        bool bOnOff;
    };
    
    CTV::CTV()
        :bOnOff(false)
    {
    }
    
    //友元类在类中声明后可以访问类的私有变量
    //同时认为在实际用途中常用如下构造函数方案去引入类这样之前的类。
    class CRemote
    {
    public:
        CRemote(CTV & pC) :myTV(pC) {};
        void SetOn()
        {
            myTV.bOnOff = myTV.on;
        }
    private:
        CTV & myTV;
        
    };
    
    int main()
    {
        CTV aTV;
        CRemote aRemote(aTV);
        aRemote.SetOn();
    }

    才疏学浅,请多指教。

  • 相关阅读:
    【考试反思】联赛模拟测试16
    【考试反思】联赛模拟测试15
    【考试反思】联赛模拟测试14
    【考试反思】联赛模拟测试13
    【学习笔记】震惊,全机房都会分块了,就我没有
    挂分宝典
    「计数」客星璀璨之夜 + 大佬
    第五阶段反思
    「板子」线段树维护单调栈
    阶段反思
  • 原文地址:https://www.cnblogs.com/ScarecrowMark/p/13520257.html
Copyright © 2011-2022 走看看