C++ Primer Plus(第6版)读书笔记【4】

第10章 对象和类

类的核心概念

简单来说,C 语言关注的是步骤(先做什么,后做什么),而 C++ 的 OOP 关注的是谁来做(把程序看成一堆互相配合的“物体”)。

可以用开发一款“赛车游戏”的例子解释c++的最重要的OOP特性:

  1. 抽象 (Abstraction),大白话:抓住重点,忽略不重要的细节。

游戏例子:在游戏里写一辆“赛车”的代码时,我们只需要记录它的速度、颜色和位置。至于轮胎是什么牌子、发动机里有几个螺丝钉,这些细节对游戏没影响,我们就不用写进代码里。这就是抽象。

  1. 封装和数据隐藏 (Encapsulation & Data Hiding),大白话:把数据和外壳打包在一起,不让外面的人瞎动。

游戏例子:赛车的“当前速度”是一个敏感数据。我们用一个外壳(类)把速度保护起来,设置成私有(Private)。玩家不能直接在代码里把速度改成 9999,必须通过点击“踩油门”这个公有(Public)按钮,赛车才会自己慢慢加满速度。这保护了程序不崩溃。

  1. 继承 (Inheritance),大白话:儿子可以直接用爸爸的财产,不用从头开始赚。

游戏例子:你已经写好了一个基础的“赛车类”(有速度、能拐弯)。现在你想加一辆“导弹赛车”。你不需要重新写一遍速度和拐弯的代码,只需要让“导弹赛车”继承基础赛车。新赛车自动就有了基础赛车的所有功能,你只需要在它身上多写一个“发射导弹”的功能就行了。

  1. 多态 (Polymorphism),大白话:同一个命令,不同的对象收到后做出不同的反应。

游戏例子:游戏里有一个“按下空格键”的命令。如果当前玩家开的是“普通赛车”,按下空格是刹车;如果开的是“重型坦克”,按下空格是开炮。同一个“空格键”命令,表现出了多种不同的形态。

  1. 代码的可重用性 (Reusability),大白话:写好的代码可以像积木一样,到处重复使用,省时省力。

游戏例子:因为你把赛车、导弹、跑道都写成了独立的、封装好的“类(积木块)”。下一个月公司想开发《赛车游戏第二代》或者一款《卡丁车游戏》时,你直接把这套代码拿过去用就行了,不用重新搬砖。

C++ 引入的 “类 (Class)” 就像是一个模具或者设计图。它把上面的抽象和封装结合在一起。有了类,我们就可以轻而易举地在电脑里创造出各种各样的“对象”(比如成千上万辆赛车),让它们在游戏里自己跑起来。

OOP 设计程序的三步走

  1. 第一步:找对象与定接口(用户视角)

怎么做:先不写代码,而是拿张纸画出用户需要什么“物体”(对象),以及用户想怎么作弄它(交互操作)。

例子:要做一个“银行账户”程序。

数据:储户名字、账号、存款余额。

操作(接口):开户、存钱、取钱、查余额。

  1. 第二步:决定内部实现(程序员视角)

怎么做:有了外面的接口,再来想里面怎么存数据、怎么写算法。用户看不到这一步,这就是“封装和数据隐藏”。

例子:数据存储:名字用 std::string 存,余额用 double 存。接口实现:写“取钱”功能时,里面要加一行安全检查——“如果取钱金额大于余额,就报错拒绝”。

  1. 第三步:组装并创建程序(实现方案)

怎么做:把上面两步写成真正的 C++ 类,然后在 main 函数里创建成千上万个对象让它们跑起来。

在 C++ 中,这三步刚好对应了不同的代码位置:

// 1 & 2. 接口描述与数据存储(通常写在头文件 .h 中)
class BankAccount {
private:
    // 决定如何存储数据
    std::string owner;
    double balance;

public:
    // 描述用户如何交互(接口声明)
    void deposit(double money);  // 存钱
    void withdraw(double money); // 取钱
};

// 3. 使用新方案创建程序(在源文件 .cpp 中使用它)
int main() {
    BankAccount my_account; // 创建对象
    my_account.deposit(100.0); // 用户与对象交互
    return 0;
}

正文完
 0
评论(没有评论)