more effective c++处理时事新闻,内容有文字,图形构成(16)

class NLComponent{}
class TextBlock: public NLComponent{}
class Graphic: public NLComponent{}

class NewsLetter{
list<NLComponent*> components
}    

方法一:他用了一个static NLComponent* readComponent(istream& str),来读取数据,分别创建对象。因为每次传入数据时,调用函数然后就push_back了返回值保存指针入栈。

方法二:对上面list这个成员的拷贝,因为存放的是类对象。所以他自己写了个虚函数:
virtual NLComponent clone() const =0;
virtual TextBlock
clone() const {return new TextBlock(*this);} 等等等
变向的调用了复制构造函数,来进行复制。
所以NewsLetter的复制构造函数就直接pushback它的clone函数。

感悟:
派生类能用到的函数,最好基类虚化,分别封装虚函数。然后封装用一个函数去调用这各个不同的虚函数。

// //