繁体   English   中英

C ++如何创建嵌套类以转发您的方法?

[英]C++ how to create nested class for forwarding your methods?

因此,我的想法很简单-有一个可以拥有自己的公共方法的类和一个嵌套的类,该类将仅使某些公共方法(伪代码)无效:

class API
{
public:
    go();
    stop();
    friend class B
    {
    public:
        void public_request()
        {
            request();
        }
        void public_go()
        {
            go()
        }
    };
private:
    void request(){}
};

是否可以在C ++中实现这种嵌套类,以及如何实现?

可以在C ++中创建Local类 本地类是在函数内部定义的类。
但是这样的类有几个限制。 在这里详细阅读。

但是,您不能像Java这样在C ++中创建嵌套类 嵌套类是另一个类范围内的一个类。

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

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

  1. 嵌套类的成员函数遵循常规的访问规则,并且对其封闭类的成员没有特殊的访问特权。
  2. 封闭类的成员函数对嵌套类的成员没有特殊访问权限。

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

不是直接的,至少不是以与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&) ]

struct API {
   void go();
   struct B {
       void go(API& api) { api.go(); }
   };
};

API a1, a2;
B b;
b.go(a1);
b.go(a2);

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

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

另外,请注意, API无需授予B友谊。 作为内部类, B可以访问API的私有/受保护成员。 反之则不成立,但是...除非B授予其许可,否则API无法访问B的私有/受保护成员。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM