this is c++ code style sample
it describes how to use virtual constructors
simply
virtual constructors means a function that
can "make" a class instance
but not a constructor
---------------------------------------------
欲做出虛擬建構子的效果,可用個虛擬的 "createCopy()" 成員函數(用來做為拷貝
建構子),或是虛擬的 "createSimilar()" 成員函數(用來做為預設建構子)。
class Shape {
public:
virtual ~Shape() { } //詳見 "virtual destructors"
virtual void draw() = 0;
virtual void move() = 0;
//...
virtual Shape* createCopy() const = 0;
virtual Shape* createSimilar() const = 0;
};
class Circle : public Shape {
public:
Circle* createCopy() const { return new Circle(*this); }
Circle* createSimilar() const { return new Circle(); }
//...
};
執行了 "Circle(*this)" 也就是執行了拷貝建構的行為(在這些運作行為中,
"*this" 的型態為 "const Circle&")。"createSimilar()" 亦類似,但它乃建構出
一個“預設的”Circle。
這樣用的話,就如同有了「虛擬建構子」(virtual constructors):
void userCode(Shape& s)
{
Shape* s2 = s.createCopy();