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