C++局部类



在一个函数体内定义的类成为局部类。局部类中只能使用它的外围作用域中的对对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关。(这句话比较拗口,其实这么理解,在函数A中定义了类B,那么只能在A中实例化一个B的对象来使用B,而不能说B.func()这种方式,个人理解,望指正)。

int val;
void fun()
{
    static int s;
    class InClass
    {
    public:
        void setS(int i)
        {
            s = i;
        }
    };
    InClass in;
    in.setS(2);
}





用局部类的时候注意的问题:
a.局部类不能被外部类所继承
b.不能定义静态变量
c.所有方法都必须在类内部实现


其实局部类在实践中很少用,其一个用途是类型转换。

class Interface  
{  
public:  
   virtual void Fun() = 0;    
};  
 
template <class T, class P> 
Interface* MakeAdapter(const T& obj, const P& arg)  
{  
    int x;  
   class Local : public Interface  
   {  
   public:  
      Local(const T& obj, const P& arg)  
         : obj_(obj), arg_(arg)  {}  
      virtual void Fun()  
      {  
          x = 100;  
         obj_.Call(arg_);  
      }  
   private:  
      T obj_;  
      P arg_;  
   };  
   return new Local(obj, arg);  
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值