c++基础语法--嵌套类

 在android source中到处都能看到嵌套 类(nested classs)的踪影,比如mutex类中的Autolock,cameraservice中的client,camerahardware中的 camera_preview,仔细去查了为什么要使用嵌套类,好像没有一个很官方的答案,大家也争吵得很厉害,但归结起来大家用得到它的地方:
        首先要说明一下外部类和嵌套类实际上就是两个类定义,他们遵循类之间访问权限的规则,外部类对内部类,内部类对外部类都没有访问特权。内部类能访问 外部类的只是enum,type,typename以及静态成员(不管是公有还是私有)。外部类能访问嵌套类的也只是 enum,type,typename以及静态成员(只能访问共有部分)。这里所说的type是指:外部类能直接用嵌套类名来声明对象,而不需要加上外部 类名的限制。
       我们再看看使用嵌套类的地方: 一个是想要向外部类隐藏底层的实现而定义,这部分一般把嵌套类的定义放在外部类的private域,这样就无法在外部类外部访问嵌套类的定义,也就是无法在外部类外部声明嵌套类的实例 ,但外部类可以声明这个类的实例,比如:
class A {
      class B {};

实际上此时A::B已经是一个私有类型,所以不能通过 class A::B b ;来声明实例。但在A的内部能声明嵌套类的实例,这方面的例子有cameraservice内的client类,camerahardware中的 camera_preview类,这两个嵌套类都是仅仅为外部类服务 的。他们本身实现了一系列相关联的功能。
        另一个是将嵌套类定义在外部类的public中,这部分典型的例子是mutex内部的autolock类,它实际上是使用了外部类的实例实现了一个 自动锁的子功能。一般来说可以通过Mutex::Autolock autolock来声明嵌套类的实例,但有一个特殊的情况:
// nested_class_declarations_2.cpp
class C
{
public:
    typedef class U u_t; // class U visible outside class C scope
    typedef class V {} v_t; // class V not visible outside class C
};

int main()
{
    // okay, forward declaration used above so file scope is used
    U* pu;

    // error, type name only exists in class C scope
    u_t* pu2; // C2065

    // error, class defined above so class C scope
    V* pv; // C2065

    // okay, fully qualified name
    C::V* pv2;
}
         实际上总结起来一个是为了隐藏底层接口,一个是为了将逻辑上一堆功能的集合在一起。呵呵代码看到现在能理解的就这么点~~大家多指正~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值