晚捆绑(late binding=动态绑定(dynamic binding)=运行时绑定(runtime binding)
如果一个函数在基类被声明为virtual,那么在所有的派生类中它都是virtual的。在派生类中virtual函数的重定义通常称为重写
纯虚函数禁止对抽象类的函数以值方式调用。这也是防止对象切片(object slicing)的一种方法。通过抽象类,可以保证在向上类型转换期间总是使用指针或引用,如果使用值则总是调用的是基类的实现
构造函数是不能为虚函数的,但析构函数能够且常常必须是虚的。不把析构函数设为虚函数是一个隐匿的错误,因为它常常不会对程序有直接的影响。但要注意它不知不觉地引入存储泄漏(关闭程序时内在未释放)
删除一个void指针并不调用函数,所以窗口并不负责清除它的对象
#include
#include
using namespace std;
class Rodent{
public:
virtual void fun()const=0;
virtual ~Rodent(){}
};
class Mouse:public Rodent{
public:
~Mouse(){
cout fun();
}
int main(){
Mouse *m = new Mouse;
Gerbil *g = new Gerbil;
Hamster *h = new Hamster;
vectorv;
v.push_back(m);
v.push_back(g);
v.push_back(h);
for(int i=0;ifun();
delete v[i];
}
Test *test = new Test;
testFun(test);
}
result:
M
~Mouse()
G
~Gerbil()
H
~Hamster()
Test
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net