为什么要在C ++中使用嵌套类?

带眼镜

有人可以将我引向一些不错的资源来理解和使用嵌套类吗?我有一些像《编程原理》之类的材料,以及诸如《IBM Knowledge Center-Nested Classes》之类的东西。

但是我仍然很难理解他们的目的。有人可以帮我吗?

马丁·约克

嵌套类非常适合隐藏实现细节。

清单:

class List
{
    public:
        List(): head(nullptr), tail(nullptr) {}
    private:
        class Node
        {
              public:
                  int   data;
                  Node* next;
                  Node* prev;
        };
    private:
        Node*     head;
        Node*     tail;
};

这里我不想公开Node,因为其他人可能决定使用这个类,因为公开的任何东西都是公共API的一部分,必须永久维护,从而妨碍我更新我的类通过将类设为私有,我不仅隐藏了实现,而且还说这是我的,我可以随时更改它,以便您不能使用它。

看一下,std::list或者std::map它们都包含隐藏的类(或者它们是吗?)。关键是它们可能存在或不存在,但是因为实现是私有的并且是隐藏的,所以STL的构建者能够在不影响您使用代码的方式的情况下更新代码,或者因为需要使用STL,而在他们周围留下了很多旧行李为了与那些决定使用隐藏在内部的Node类的傻瓜保持向后兼容list

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么要在C中使用静态函数?

来自分类Java

为什么要在Spring中使用self类?

来自分类Python

为什么要在Python中使用抽象基类?

来自分类Dev

为什么要在AngularJS中使用$ onInit?

来自分类Dev

为什么要在golang中使用组合?

来自分类Dev

为什么要在 Angular 中使用 ValueAccessor?

来自分类Java

为什么要在Android中使用RequestQueue?

来自分类Dev

为什么要在Dialogflow中使用动作

来自分类Dev

为什么要在结构中使用malloc?

来自分类Dev

为什么要在FRP中使用行为

来自分类Dev

为什么要在延迟中使用setTimeout

来自分类Dev

为什么要在laravel中使用npm?

来自分类Dev

为什么要在Flux中使用“动作”?

来自分类Dev

为什么要在Flink中使用kafka

来自分类Dev

为什么要在Typescript中使用接口

来自分类Dev

为什么要在ListView中使用DataTemplate?

来自分类Dev

什么时候以及为什么需要在C ++中使用cin.ignore()?

来自分类Java

在Java中使用静态嵌套类的缺点是什么?

来自分类Dev

为什么需要在其元类派生自ABCMeta的类中使用@abstractmethod?

来自分类Dev

为什么需要在c#中使用所有属性而不是公共实例变量?

来自分类Dev

为什么我们需要在C ++头文件中使用“ #if defined Identifier”?

来自分类Dev

为什么需要在Objective-C中使用@property关键字?

来自分类Dev

为什么我需要在C#和PostgreSQL中使用Npgsql引用列和表?

来自分类Dev

为什么需要在Objective-C的头文件中使用“外部静态”来定义常量?

来自分类Dev

什么是背景?为什么要在odoo中使用?

来自分类Dev

为什么我们需要在 Spring Data JPA 中使用 @Transactional 注释 Service 类

来自分类Java

为什么要在类内部声明接口?

来自分类Dev

包装要在Python中使用的C ++类

来自分类Dev

为什么派生类的构造函数要在C ++中初始化虚拟基类?

Related 相关文章

  1. 1

    为什么要在C中使用静态函数?

  2. 2

    为什么要在Spring中使用self类?

  3. 3

    为什么要在Python中使用抽象基类?

  4. 4

    为什么要在AngularJS中使用$ onInit?

  5. 5

    为什么要在golang中使用组合?

  6. 6

    为什么要在 Angular 中使用 ValueAccessor?

  7. 7

    为什么要在Android中使用RequestQueue?

  8. 8

    为什么要在Dialogflow中使用动作

  9. 9

    为什么要在结构中使用malloc?

  10. 10

    为什么要在FRP中使用行为

  11. 11

    为什么要在延迟中使用setTimeout

  12. 12

    为什么要在laravel中使用npm?

  13. 13

    为什么要在Flux中使用“动作”?

  14. 14

    为什么要在Flink中使用kafka

  15. 15

    为什么要在Typescript中使用接口

  16. 16

    为什么要在ListView中使用DataTemplate?

  17. 17

    什么时候以及为什么需要在C ++中使用cin.ignore()?

  18. 18

    在Java中使用静态嵌套类的缺点是什么?

  19. 19

    为什么需要在其元类派生自ABCMeta的类中使用@abstractmethod?

  20. 20

    为什么需要在c#中使用所有属性而不是公共实例变量?

  21. 21

    为什么我们需要在C ++头文件中使用“ #if defined Identifier”?

  22. 22

    为什么需要在Objective-C中使用@property关键字?

  23. 23

    为什么我需要在C#和PostgreSQL中使用Npgsql引用列和表?

  24. 24

    为什么需要在Objective-C的头文件中使用“外部静态”来定义常量?

  25. 25

    什么是背景?为什么要在odoo中使用?

  26. 26

    为什么我们需要在 Spring Data JPA 中使用 @Transactional 注释 Service 类

  27. 27

    为什么要在类内部声明接口?

  28. 28

    包装要在Python中使用的C ++类

  29. 29

    为什么派生类的构造函数要在C ++中初始化虚拟基类?

热门标签

归档