首页 > 代码库 > 面向对象程序设计

面向对象程序设计

OOP概述

1.面向对象程序设计的核心思想数据抽象(封装)、继承和动态绑定(多态性)。

  通过数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。

  封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类),它们的目的都是为了代码重用。而多态则是为了实现另一个目的,接口重用

2.虚函数意义:对于某些函数,基类希望它的派生类各自定义适合自己的版本,此时基类就将这些函数声明成虚函数(virtural)。

  任意非static成员都可以为虚成员

3.动态绑定当我们使用基类引用(或指针)调用一个虚函数时,将发生动态绑定。

定义基类

1.基类通常都应该定义一个虚析构函数,即使该函数不执行任何实际操作。这保证了在任何情况下,不会出现由于析构函数未被调用而导致的内存泄漏

class Quote{public:    ...    virtual ~Quote()=default;   //虚析构函数}

2.成员函数与继承

  基类必须将两种成员函数区分开:一种是基类希望其派生类进行覆盖的函数,此类函数声明为虚函数;另一种是希望其派生类直接继承而不要改变的函数,非虚成员函数。

  虚函数的解析过程发生在运行时(直到运行时才会决定到底执行哪个版本);;对于非虚成员函数,其解析过程发生在编译时而非运行时(在编译时进行绑定)。

3.访问控制与继承

  派生访问说明符对于派生类的成员(及友元)能否访问其直接基类的没有影响。对基类成员的访问权限只与基类中的访问说明符有关。

  派生类能访问基类的public成员,而不能访问private成员。

  而对于protected成员:

  1)和private成员一样,protected成员对于类的用户来说是不可访问的。

  2)和public成员类似,proected成员对于派生类的成员和友元来说是可访问的。

 

面向对象程序设计