首页 > 代码库 > 面向对象程序设计
面向对象程序设计
OOP概述
1.面向对象程序设计的核心思想:数据抽象(封装)、继承和动态绑定(多态性)。
通过数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。
封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类),它们的目的都是为了代码重用。而多态则是为了实现另一个目的,接口重用!
2.虚函数意义:对于某些函数,基类希望它的派生类各自定义适合自己的版本,此时基类就将这些函数声明成虚函数(virtural)。
任意非static成员都可以为虚成员。
3.动态绑定:当我们使用基类的引用(或指针)调用一个虚函数时,将发生动态绑定。
定义基类
1.基类通常都应该定义一个虚析构函数,即使该函数不执行任何实际操作。这保证了在任何情况下,不会出现由于析构函数未被调用而导致的内存泄漏。
class Quote{public: ... virtual ~Quote()=default; //虚析构函数}
2.成员函数与继承
基类必须将两种成员函数区分开:一种是基类希望其派生类进行覆盖的函数,此类函数声明为虚函数;另一种是希望其派生类直接继承而不要改变的函数,非虚成员函数。
虚函数的解析过程发生在运行时(直到运行时才会决定到底执行哪个版本);;对于非虚成员函数,其解析过程发生在编译时而非运行时(在编译时进行绑定)。
3.访问控制与继承
派生访问说明符对于派生类的成员(及友元)能否访问其直接基类的没有影响。对基类成员的访问权限只与基类中的访问说明符有关。
派生类能访问基类的public成员,而不能访问private成员。
而对于protected成员:
1)和private成员一样,protected成员对于类的用户来说是不可访问的。
2)和public成员类似,proected成员对于派生类的成员和友元来说是可访问的。
面向对象程序设计