継承できないクラスをC++で実現

4773 ワード

        :

  ,    ,           。            ,                 ,          ,             !

           :

  : C++           

     ?     ?     ?           ,                 ,      。

      ,                ,                   ,            。

  ,    ,               ?                   。

  。        ,      ,           ,        。

Ok?       ?             ,        。

OK。        。      :

#include<iostream>
using  namespace std;
class  A
{
public:
    static  A * Construct(int  n)
    {
        A *pa = new A;
        pa->num = n;
        cout<<"num  is:"<<pa->num<<endl;
        return pa;
    }
    static  void Destruct(A * pIntance)
    {
        delete  pIntance;
        pIntance = NULL;
    }
private:
    A(){}
    ~A(){}
public:
    int num;
};
void  main()
{
    A *f = A::Construct(9);
    cout<<f->num<<endl;
    A::Destruct(f);
}
  ,       。         ,             。

  ,   ,       ,     ?       ,              ,         。

   ?       。          ?       ?      ,       !

                。    ,                 ,          。

                     。

  !     ,         “   ”,      :

#include<iostream>
using namespace std;
template <typename T> 
class Base
{
    friend T;
private:
    Base() {}
    ~Base() {}
};

class Finalclass : virtual public Base<Finalclass>
{                
public:
    Finalclass() {}
    ~Finalclass() {}
};
void  main()
{
    Finalclass  *p = new Finalclass;  //    
    Finalclass  fs;                 //    
}
OK。       Finalclass 。

   Base,Base    ,    Base   ,  ,              ,      。         。

    ,         ,           。

    ?               ,            。

         ,        :

         ,      ,               Base      , Base         。    error!!!

              。
http://www.cnblogs.com/Braveliu/archive/2013/01/03/2842739.html