//解决复制编译时类型未知的对象
//我们可能出于一个多态性的环境中,我们能够知道对象的基类的类型,但是不知道对象本身的类型,怎样复制这种类型的对象呢?
class Vehicle{
public:
virtual double weight() const = 0;
virtual void start() = 0;
virtual Vehical* copy() const = 0; // *这个就是虚复制函数,它会被其子类继承,在子类中被实现,因此要生成子类对象的一个新副本,只需调用子类的复制函数,无需知道子类的具体类型
virtual ~Vehical(){} //处理完一个对象后,需要清除该对象需要一个虚析构函数
}
class Truck : public Vehical { /* ... */ };
Vehical* Truck::copy() const //举例:在子类Truck中copy函数的实现
{
return new Truck( *this );
}