#include <windows.h>

class Sample
{
public:
    Sample()
    
{
    }


    
virtual void flag() const
    
{
        MessageBox(
0,"Sample","111",0);
    }

}
;

class SampleA:public Sample
{
public:
    SampleA()
    
{

    }


    
void flag() const
    

        MessageBox(
0,"SampleA","111",0);
    }

}
;

class SampleB:public Sample
{
public:
    SampleB()
    
{

    }


    
void flag() const
    
{
        MessageBox(
0,"SampleB","111",0);
    }

}
;

class Factory
{
public:
    Sample
* Creator(int which)
    
{
        Sample
* s;
        
switch (which)
        
{
        
case 1:
            s
=&(SampleA());
            
break;
        
case 2:
            s
=&(SampleB());
            
break;
        }

        
return s;
    }

}
;
注意:Factory类的方法返回的是Sample* 而不是Sample,否则不能使用后期绑定

如此使用
int main()
{
 Factory f=Factory();
 Sample* s=f.Creator(1);
 s->flag()
;}