16,472
社区成员
发帖
与我相关
我的任务
分享
class Base
{
public:
virtual void method() = 0;
static Base& instance(){return inst.get();}
static std::auto_ptr<Base> inst;
};
class Child1 : public Base
{
virtual void method(){...};
}
class Child2 : public Base
{
virtual void method(){...};
}
int WinMain(...)
{
if( /*case 1*/ )
{
new Child1();
}
else
{
new Child2();
}
Base::instance().method();
return 0;
}
class Base
{
public:
Base()//比如增加这样的一个构造函数
{
inst.reset( this );
}
virtual void method() = 0;
static Base& instance(){
return *inst.get();
}
static std::auto_ptr<Base> inst;
};
std::auto_ptr<Base> Base::inst= std::auto_ptr<Base>(NULL);
class Child1 : public Base
{
virtual void method(){
printf("child1\n");
};
};
class Child2 : public Base
{
virtual void method(){
printf("child2\n");
};
};
int main()
{
if ( 1 )
{
new Child1();
}
else
{
new Child2();
}
Base::instance().method();
return 0;
}
class Base
{
public:
virtual void method() = 0; // 纯虚函数,必须在子类中实现
static Base* instance() // 静态函数,不需要对象即可调用,但不能访问非静态成员
{
return inst.get();
}
static std::auto_ptr<Base> inst; // 静态成员变量,不需要对象即可使用
};
std::auto_ptr<Base> Base::inst; // 静态成员变量需要单独分配储存单元
class Child1 : public Base
{
virtual void method(){...};
}
class Child2 : public Base
{
virtual void method(){...};
}
int WinMain(...)
{
if( /*case 1*/ )
Base::inst.reset(new Child1());
else
Base::inst.reset(new Child2());
Base::instance()->method();
return 0;
}