Item 29. Virtual Constructors and Prototype&Item 30. Factory Method
Item 29. Virtual Constructors and Prototype
Virtual Constructors?
C++没有Virtual Constructors这个概念。但有的情况下又需要这个功能,即在多态的时候能够创建出一个跟指针的动态类型相同的一个对象。既然是多态就要考虑虚函数,在虚函数中调用构造函数不就行了么?是的,这就是设计模式中的Prototype的解决方案:一个clone()的虚成员函数。
class Meal {
public:
virtual ~Meal();
virtual void eat() = 0;
virtual Meal *clone() const = 0;
//...
};
class Spaghetti : public Meal {
public:
Spaghetti( const Spaghetti & ); // copy ctor
void eat();
Spaghetti *clone() const
{ return new Spaghetti( *this ); } // call copy ctor
//...
};
const Meal *m = new Spaghetti;
Meal *myMeal = m->clone();
Item 30. Factory Method
哦,《设计模式》一书的更详细。