C++的那些事:面向对象
1 OOP概述 面向对象基于三个基本概念:数据抽象、继承和动态绑定。通过使用数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。 1.1 继承 继承是派生类与基类之间的关系,它们共享了一些公共的东西,而派生类特化了一些本质不同的东西。类与类之间的继承关系构成了继承层次。在C++中,基类必须指定希望派生类重定义哪些函数,定义为virtual的函数是基类期待派生类重新定义的,需要在派生类中继承的不能定义为虚函数。 派生类重新定义的虚函数前面可以加virtual,但这不是必要的,在C++11中,允许派生类显式地注明它将使用哪个成员函数改写基类虚函数,只用在该函数形式参数列表后增加一个override关键字。 1.2 动态绑定 当函数接口定义了基类的引用(或指针)时,在函数内调用虚函数时,发生动态绑定。因为这时候函数实参可以为基类类型也可以为派生类类型, 虚函数只有在运行阶段 才能确定需要调用哪个定义。 2 定义基类与派生类 2.1 定义基类 基类成员函数中希望在派生类中重新定义的函数前面加了virtual,这类函数在调用时,在程序运行阶段确定。任何构造函数之外的非静态函数都可以是虚函数。virtual关键字只需要在基类定义的时候加在需要重定义的函数前面,实现的时候不需要。