五、面向对象编程风格

本文深入探讨了面向对象编程中的继承和多态概念。继承允许组织相关类,共享公共接口和实现,而多态则提供了类型无关的操作方式。文章详细解释了C++中的继承体系,包括抽象基类、动态绑定和静态绑定。此外,还阐述了如何通过虚函数实现多态,以及在派生类中访问和覆盖基类成员的规则。
摘要由CSDN通过智能技术生成
  • 类间的关系依赖于 面向对象编程模型(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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值