C++ C++;如何创建用于转发方法的嵌套类?

C++ C++;如何创建用于转发方法的嵌套类?,c++,class,nested,C++,Class,Nested,所以我的想法很简单——有一个可以有自己的公共方法的类和一个只支持某些公共方法的嵌套类(伪代码): 是否可以在C++中实现这样的嵌套类,而如何?< /p>不直接,至少与java不一样。嵌套类必须包含指向“外部”类的指针或引用。不是直接的,至少与Java中的方式不同。嵌套类必须包含一个指针或指向“外”类的引用。 在C++中可以创建一个强的>局部类< /强>。本地类是在函数中定义的类。 但这样的类有几个限制。详细阅读它 在C++中,不能像java一样创建嵌套类。嵌套类是另一个类范围内的类 嵌套类的名称

所以我的想法很简单——有一个可以有自己的公共方法的类和一个只支持某些公共方法的嵌套类(伪代码):


<>是否可以在C++中实现这样的嵌套类,而如何?< /p>不直接,至少与java不一样。嵌套类必须包含指向“外部”类的指针或引用。

不是直接的,至少与Java中的方式不同。嵌套类必须包含一个指针或指向“外”类的引用。

在C++中可以创建一个强的>局部类< /强>。本地类是在函数中定义的类。
但这样的类有几个限制。详细阅读它

<>在C++中,不能像java一样创建<强>嵌套类<强>。嵌套类是另一个类范围内的类

嵌套类的名称是其封闭类的本地名称(在封闭类的范围外不可见)。除非使用显式指针或引用,否则嵌套类中的声明只能使用可见的构造,包括封闭类中的类型名、静态成员和枚举数

嵌套类需要注意的两个要点是:

  • 嵌套类的成员函数遵循常规访问规则,对其封闭类的成员没有特殊访问权限
  • 封闭类的成员函数对嵌套类的成员没有特殊访问权限

  • 这样,您就需要使用<强>构图< />或显式地将一个指针或引用的外部类对象传递给嵌套类

    ,可以在C++中创建一个<强>局部类< /强>。本地类是在函数中定义的类。
    但这样的类有几个限制。详细阅读它

    <>在C++中,不能像java一样创建<强>嵌套类<强>。嵌套类是另一个类范围内的类

    嵌套类的名称是其封闭类的本地名称(在封闭类的范围外不可见)。除非使用显式指针或引用,否则嵌套类中的声明只能使用可见的构造,包括封闭类中的类型名、静态成员和枚举数

    嵌套类需要注意的两个要点是:

  • 嵌套类的成员函数遵循常规访问规则,对其封闭类的成员没有特殊访问权限
  • 封闭类的成员函数对嵌套类的成员没有特殊访问权限

  • 因此,您需要使用组合或显式地将外部类的对象的指针或引用传递给嵌套类

    是的,但在创建内部类时必须提供外部类的实例。。。这两种类型[大部分]是独立的,因此
    B
    API
    的任何特定实例都没有关联

    更多伪代码

    struct API {
       void go();
       struct B {
           B(API& api) : api(api) { }
           void go() { api.go(); }
       };
    };
    
    API a;
    B b(a);
    b.go();
    
    或者,您可以将
    API
    的实例传递给
    B
    的函数[
    B::go(API&)
    ]

    此外,
    API
    不包含
    B
    的实例,除非您明确添加实例

    struct API {
      struct B { };
      B b;
    };
    

    另外,请注意,
    B
    不需要通过
    API
    授予友谊。作为一个内部类,
    B
    已经可以访问
    API
    s私有/受保护的成员。然而,事实并非如此
    API
    无法访问
    B
    s私有/受保护的成员,除非
    B
    授予其权限。

    是,但创建内部类时必须提供外部类的实例。。。这两种类型[大部分]是独立的,因此
    B
    API
    的任何特定实例都没有关联

    更多伪代码

    struct API {
       void go();
       struct B {
           B(API& api) : api(api) { }
           void go() { api.go(); }
       };
    };
    
    API a;
    B b(a);
    b.go();
    
    或者,您可以将
    API
    的实例传递给
    B
    的函数[
    B::go(API&)
    ]

    此外,
    API
    不包含
    B
    的实例,除非您明确添加实例

    struct API {
      struct B { };
      B b;
    };
    

    另外,请注意,
    B
    不需要通过
    API
    授予友谊。作为一个内部类,
    B
    已经可以访问
    API
    s私有/受保护的成员。然而,事实并非如此
    API
    无法访问
    B
    s私有/受保护的成员,除非
    B
    授予其权限。

    为什么要这样做?刚开始公开
    请求
    似乎不那么麻烦。你为什么希望这样做?刚开始公开
    请求
    似乎不那么麻烦。