• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

稻草人MNMN

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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();
}

 

才疏学浅,请多指教。

posted on 2020-08-17 21:35  稻草人MNMN  阅读(151)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3