本篇有三个重点:
1.虚拟构造函数
由于类自身的构造函数是无法定义成虚函数的,但是往往会有根据不同输入产生不同对象的需求,于是出现了以下函数:
clss NLComponent;
class TextBlock: public NLComponent
{
}
class Graphic:public NLComponent
{
}
class NewsLetter
{
public:
private:
static NLCompoment* readComponent(istream & str)
{
//此处为实现,穿件不同的类,此函数即称为虚拟构造函数
}
}
虚拟构造函数的应用场合很多,类工厂等都是由此原理产生。
2.虚拟拷贝构造函数
class TextBlock :public NLComponent
{
public:
virtual TextBlock* clone() const //虚拟拷贝构造函数
{
return new TextBloct(*this);
}
}
上述函数内部的拷贝操作与类的拷贝构造函数完全保持一致,并且具有多态的性质。
3.非成员函数定义为虚函数
原则上是走不通的,毕竟不是成员函数。但是通过以下方法可以实现:在类中写虚函数,在外部调用虚函数即可