面向对象程序设计基于三个基本概念:数据抽象、继承和动态绑定
。通过数据抽象,可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,从而以统一的方式使用它们的对象。
定义基类和派生类
定义基类
在C++语言中,当我们使用基类的引用或者指针调用一个虚函数时将发生动态绑定,即在运行时选择函数的版本。基类通常都应该定义一个虚析构函数,即使该函数不执行任何实际操作也是如此
。因为在C++中,当派生类对象经由一个基类对象指针被删除,而该基类带有一个非虚析构函数,那么基类成分将被销毁,而派生类对象的析构函数未被执行,从而造成“局部销毁”对象。
是否应该声明virtual析构函数的原则:
如果类带有任何virtual函数,它就应该拥有一个virtual析构函数
如果类设计的目的不是作为基类使用,或者不是为了具备多态性,就不该声明virtual析构函数
基类通过在其成员函数的声明语句之前加上关键字virtual使得该函数执行动态绑定。关键字virtual仅出现在声明处而不能用于类外部的函数定义。在基类中为virtual函数,则该函数在派生类中隐式地也是虚函数。
more >>