jake1036

面试100 32一个不可以被继承的类

  面试100 32一个不可以被继承的类

 一 问题描述
        一个不能被继承的类,若是JAVA语言,可使用FINAL 关键字来实现。
 但是c++语言中,没有此类的关键字。
 
 一个考虑的方向,是将类的构造函数和析构函数,设置为私有的,然后使用静态的方法去获取该类的实例


 方法1
  
 class NoExtend //此时这样做的话,只会在堆上分配内存,无法在栈上分配对象 
  {
    
private :
            NoExtend() ;
            
~NoExtend() ;
    
public :
           
static    NoExtend * getinstance()
           
{
             
return new NoExtend() ;          
           }
     
           
           
static void delInstance(NoExtend * pInstance)
           
{
             
if(pInstance)     
                 
{
                   delete pInstance ;
                   pInstance 
= 0 ;                                             
                 }
 
           }

           
          
  }
 ;

  
  
class FinalClass 
  
{
      friend   
class FinalClass2 ;   
    
private :
      FinalClass() 
{}
      
~FinalClass() {}
          
  }
;
  
  
class FinalClass2 : public virtual  FinalClass  //该类无法继承,但是该类的实例可以在堆上或者是栈上初始化 
  {
       
public :
            FinalClass2() 
{}
            
~FinalClass2() {}  
          
  }
 ;
     




posted on 2011-05-21 15:54 kahn 阅读(374) 评论(0)  编辑 收藏 引用 所属分类: 算法相关


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理