-- 析构函数可以为virtual类型,而构造函数则不能。构造函数为什么不能为virtual类型呢?
虚函数采用一种虚调用的办法。虚调用是一种可以在只有部分信息的情况下工作的机制,特别允许我们调用一个只知道接口而不知道其准确对象类型的函数。但是如果要创建一个对象,就必须要知道对象的准确类型,因此构造函数不能为虚函数。
-- 如果虚函数是非常有效的,我们是否可以把每个函数都声明为虚函数?
不行,这是因为虚函数是有代价的:由于每个虚函数的对象都必须维护一个v表,因此在使用虚函数的时候都会产生一个系统开销。如果仅是一个很小的类,且不想派生其他的类,那么根本没有必要使用虚函数。