C++ 嵌套类和局部类

  • 嵌套类

    • 定义
      一个类可以定义在另一个类的内部,被称为嵌套类,定义嵌套类的类被称为外部类。嵌套类时一个独立的类,和外层类基本没什么关系,它是一个独立的类,它的成员不属于外部类外围类的成员也不属于该嵌套类

    • 作用
      之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。

    • 作用域
      1、如果嵌套类声明在一个类的私有部分,则只有嵌套类的外部类可以访问;
      2、如果嵌套类声明在一个类的保护部分,则只有嵌套类的外部类和外部类的派生类可以访问;
      3、如果嵌套类声明在一个类的公有部分,都可以访问但是必须加上外部类的外部类作用域限制符。

    • 访问权限
      1、嵌套类名与它的外部类的对象成员名具有相同的访问权限规则,外部类对象的访问权限只有public,所以嵌套类也是一样;
      2、嵌套类中说明的成员不是外部类中对象的成员嵌套类的出现只是告诉外围类有一个这样的类型成员供外围类使用。并且,外围类对嵌套类成员的访问没有任何特权,嵌套类对外围类成员的访问也同样如此,它们都遵循普通类所具有的标号访问控制。
      3、嵌套类可以直接引用外围类的静态成员、类型名和枚举成员(假定这些成员是公有的)。
      4、嵌套类必须声明在类的内部,但是可以定义在类的内部或者外部。
      5、在外层类之外定义一个嵌套类时,必须以外层类的名字限定嵌套类的名字。

      
      class Outer
      {
      public:
      	 class Inner
      	 {
      	 public:
      	  	void Fun();
      	 };
      public:
          Inner obj_;
       void Fun()
       {
         cout<<"Outer::Fun...."<<endl;
         obj_.Fun();
       }
      };
      
      
      void Outer::Inner::Fun()
      {
        cout<<"Inner::Fun..."<<endl;
      }
      
      void Fun()
      {
        class LocalClass
        {
        public:
         int num_;
         void Init(int num)
         {
           num_=num;
         }
         void Display()
         {
           cout<<"num_"<<num_<<endl;
         }
        };
        LocalClass lc;
        lc.Init(10);
        lc.Display();
      }
      int main()
      {
        Outer o;
        o.Fun();
        Outer::Inner i;
        i.Fun();
        Fun();
        return 0;
      }
      结果:
      Outer::Fun....
      Inner::Fun...
      Inner::Fun...
      num_10
      
  • 局部类

类可以定义在某个函数的内部,这样的类被称为局部类,局部类定义的类型只在定义它的作用域内可见。
局部类不能使用函数作用域中的变量。
局部类已经封装在函数作用域中,通过信息隐藏进一步封装就显得没什么必要了。
可以在局部类的内部再嵌套一个类,此时,嵌套类的定义可以出现在局部类之外且与局部类相同的作用域中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值