文章目录
第 15 章 面向对象程序设计
15.1 OOP:概述
- 第 15 章 面向对象程序设计
- 15.1 OOP:概述
- 15.2 定义基类和派生类
- 15.2.1 定义基类
- 15.2.2 定义派生类
- 15.2.3 类型转换与继承
面向对象程序设计(Object-Oriented Programming)的核心思想是:
- 数据抽象(第 7 章)
- 继承
- 动态绑定
(1)继承
基类:Quote,表示按原价销售的书籍。
派生类:Bulk_quote,表示可以打折销售的书籍。
这些类将包含下面的两个成员函数∶
- isbn(),返回书籍的 ISBN 编号
- net_price(size_t),返回书籍的实际销售价格
在 C++ 中,基类将类型相关的函数与派生类不做改变直接继承的函数区分对待。对于某些函数,基类希望它的派生类各自定义适合自身的版本,此时基类就将这些函数声明成虚函数。因此将 Quote 类编写成:
class Quote
{
public:
std::string isbn() const;
virtual double net_price(std::size_t n) const; // virtual 表示此为虚函数
};
派生类必须通过使用类派生列表明确指出它是从哪个(哪些)基类继承而来的。
// Bulk_quote 继承了Quote
class Bulk_quote : public Quote
{
public:
double net_price(std::size_t) const override;
};
派生类必须在其内部对所有重新定义的虚函数进行声明。派生类可以在这样的函数之前加上 virtual 关键字,但是并不是非得这么做。
C++11 新标准允许派生类显式地注明它将使用哪个成员函数改写基类的虚函数,具体措施是在该函数的形参列表之后增加一个 override 关键字。
(2)动态绑定
通过使用动态绑定,我们能用同一段代码分别处理 Quote 和 Bulk_quote 的对象。
下面的函数负责打印总的费用:
// 计算并打印销售给定数量的某种书籍所得的费用
double print_total(ostream &os, const Quote &item, size_t n)
{
// 根据传入 item 形参的对象类型调用 Quote::net_price
// 或者 Bulk_quote::net_price
double ret = item.net_price(n);
//调用 Quote::isbn
os
关注
打赏
热门博文
- 2022-09-09 Unity InputSystem5——PlayerInput
- 2022-09-09 Unity InputSystem4——输入配置文件
- 2022-09-09 Unity InputSystem3——InputAction
- 2022-09-09 Unity InputSystem2——代码检测输入
- 2022-09-09 Unity InputSystem1——概述
- 2022-08-26 Unity视频播放4——全景视频
- 2022-08-26 Unity视频播放3——VideoPlayer
- 2022-08-26 Unity视频播放2——视频剪辑设置
- 2022-08-26 Unity视频播放1——视频介绍
- 2022-07-15 Unity核心10——导航寻路系统