- 类间的关系依赖于 面向对象编程模型(object-oriented programming model)加以设定。
- 面向对象编程最主要的特质是继承(inheritance)和多态(polymorphism)。前者将一群相关的类组织起来,得以分享其间的共通数据和操作行为,后者让我们如同操控单一个体而非相互独立的类,并赋予加入和移除任何特定类的弹性。
- 继承机制定义了父子关系。父类定义了所有子类共通的公有接口(public interface)和私有实现(private implementation)。每个子类都可以增加或覆盖(override)继承而来的东西,以实现其自身独特的行为。
- C++中,父类被称为基类(base class),子类被称为派生类(derived class)。父类和子类之间的关系称为继承体系(inheritance hierarchy)。所谓继承体系,是由最抽象的部分推演至最具体的部分。
- 抽象基类(abstract base class)指那些并不代表实际某个类别,仅仅为设计上的需要而存在的基类,用来定义共通的操作行为。
- 多态让基类的pointer或reference得以透明地(transparently)指向任何一个派生类的对象。除非程序实际执行的当下,否则无法确定指向的是哪一个派生对象,且每次函数执行情况都可能不同。
- 动态绑定(dynamic binding):解析操作“找出实际被调用的是哪一个派生类的函数”会延迟至运行时才进行。
- 静态绑定(static binding):程序执行之前就已经解析出应该调用哪一个函数。
- 继承特性让我们得以定义一组互有关联的类并共享共通的接口。多态让我们得以用一种与类型无关(type-independent)的方式来操作这些类对象。
- 多态和动态绑定的特性只有在使用pointer或reference时才发挥作用。
- 默认情形下,member function的解析皆在编译时静态进行。若要令其在运行时动态进行,我们要在其声明前加上关键字
virtual
,表示其为虚函数。 - 当程序定义出一个派生对象,基类和派生类的constructor都会被执行;当派生对象被销毁,基类和派生类的destructor也都会被执行(但次序颠倒,先派生后基)。
- 定义派生类时,为了清楚标示这个新类是继承自一个已存在的类,其名称后必须接一个冒号
:
,然后紧跟着关键字public
和基类的名称。(*基类可以是public、protected或private三种方式继承而来,本书仅讨论public)。 - 类进行继承声明之前,其基类的定义必须已经存在(需先行包含含有基类定义的头文件)。
- 被声明为
protected
的所有成员都可以被派生类直接访问,除此之外都不能直接访问protected成员。 public
,protected
,private
三种继承方式,它们相应地改变了基类成员的访问属性:- public 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:public, protected, private;
- protected 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:protected, protected, private;
- private 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:private, private, private。
五、面向对象编程风格
最新推荐文章于 2022-03-04 14:33:45 发布
本文深入探讨了面向对象编程中的继承和多态概念。继承允许组织相关类,共享公共接口和实现,而多态则提供了类型无关的操作方式。文章详细解释了C++中的继承体系,包括抽象基类、动态绑定和静态绑定。此外,还阐述了如何通过虚函数实现多态,以及在派生类中访问和覆盖基类成员的规则。
摘要由CSDN通过智能技术生成