前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >友元类和嵌套类

友元类和嵌套类

作者头像
艰默
发布2022-12-12 10:22:17
7180
发布2022-12-12 10:22:17
举报
文章被收录于专栏:iDoitnow

友元类

友元函数用于类的扩展接口中,类并非只能拥有友元函数,也可以将类作为友元,该类称为友元类

友元类的所有方法都可以访问原始类的私有成员和保护成员,但也可以对其做更严格的限制,使得特定的成员函数成为另一个类的友元。

友元类和继承、包含的关系

我们为什么要提供友元类的这种接口呢,它既然可以从外部访问类的私有部分的权限,是不是与我们面向对象的编程思想相悖呢?答案显然是否定的,那我们举个例子分析一下,友元类存在的意义。

假设我们要编写一个模拟电视机和遥控器的程序,我们用TVRemote来分别表示电视机和遥控器,很显然,这两者之间不是is-a(电视机不是遥控器一种,遥控器也不是电视机的一种)关系,也不是has-a(电视机与遥控器没有明显的包含关系)关系,因此不能使用继承和包含的实现方法,但是遥控器可以调用电视机里面的某些功能,如调节音量、更换频道和开关机等等。这表明Remote类应该作为TV类的一个友元类,这样就可以轻松调TV类中的成员和成员函数,来完成自己的接口实现。因此友元类不仅没有与面向对象的编程思想相悖,而且提高了公有接口的灵活性。

嵌套类

c++允许将类的声明放在另外一个类中,在另外一个类中声明的类被称为嵌套类。对类进行嵌套的主要目的是为了帮助实现另外一个类,并避免名称冲突。

类的嵌套和包含

包含往往意味着将类对象作为另外一个类的成员,而嵌套不创建类成员,而是定义一种类型,该类型仅在包含嵌套类声明中有效。

嵌套类的作用域特征:

声明位置

包含它的类是否可以使用它

从包含它的类派生而来的类是否可以使用它

在外部是否可以使用

私有部分

保护部分

公有部分

是,通过类限定符来使用

(注:嵌套结构和枚举与嵌套类相似,也适用于上表。)

类声明的位置决定了类的作用域和可见性。类可见后,访问控制规则(公有、私有、保护、友元)决定程序对嵌套类成员的访问权限。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iDoitnow 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 友元类
    • 友元类和继承、包含的关系
    • 嵌套类
      • 类的嵌套和包含
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档