公有继承: Interface And Implementation
三种继承的方式:
pure virtual function
只继承基类的接口,要在派生类中重写该函数的实现。至于是在子类中实现还是子类的子类中实现都无所谓,关键是需要实例化的类就需要实现,不然对象是无法创建的。
virtual function
普通虚函数对应于基类是有缺省的实现的,派生类继承过来的函数既包含接口又包含缺省的实现。派生类可以选择是否重写缺省的实现。同时继承接口和缺省实现是一件有风险的事情。因为或许你的某个派生类忘记重写该虚函数,那调用的时候就是调用的缺省的实现。
两个解决办法:
1. pure virtual function + Default Realize。派生类只继承接口,想要使用缺省实现,必须显示调用
2. override 防止忘记, 强制重写该虚函数
normal function
派生类继承了接口和强制实现。所以不需要在派生类中重写该函数。 不重写,调用的是父类的实现。重写,调用的是派生类的实现。
有时候你会发现virtual function 和normal function 结果看,好像差不多。其实二者的区别需要从静态联编和动态联编这边分析。下次再说。