首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >EasyC++55,初探面向对象

EasyC++55,初探面向对象

作者头像
TechFlow-承志
发布2022-08-26 17:22:34
发布2022-08-26 17:22:34
1640
举报
文章被收录于专栏:TechFlowTechFlow

作者 | 梁唐

大家好,我是梁唐。

这是EasyC++系列的第55篇,来聊聊面向对象。

初探面向对象

面向对象是我们编程当中必学的一课,也是软件工程当中非常非常重要的一环。

当我们初学编程的时候,完成的往往都是面向过程的程序。比如说计算圆的面积,或者是做一道LeetCode算法题。我们编写的所有代码完成的都是单纯的计算步骤,而面向对象是一次对计算步骤的抽象,它并不是一种技术,而是一种思维模式和编程理念。

我们以微信当年的打飞机游戏为例。

假设我们要来开发这样一个游戏,如果我们以面向过程的思路去编程。那么我们需要用许多变量来表示敌机、己方飞机等等。对于一架飞机来说,它会有许多属性,比如说血量、弹药、位置等等。那么就意味着我们需要使用许多数组来分别存储这些变量。

显然,这种方式的代码编写难度很大,因为变量很多,逻辑也很乱,很容易写着写着就晕了。

所以我们可以对问题进行一次抽象,可以简单理解成,将一些变量聚合成一个实体,针对每一个实体开发功能。比如说我们可以把飞机看成是一个实体,在这个实体当中赋予属性。比如说血量、位置、攻击力等等。在面向对象当中我们把这样的实体叫做类,其实可以简单理解成是一种特殊的结构体。

代码语言:javascript
复制
class Plane {
    int x, y; // 位置
    int health; // 血量
    int attack; // 攻击力
    bool alive; // 是否存活
}

这就是一个最简单的类,除了把struct换成了class,几乎和结构体是一样的。按照同样的方法, 我们可以定义出其他的一些类,甚至整个游戏显示的界面也可以抽象成一个类。

到目前为止,看起来我们只是定义了一个结构体。实际上不止如此,我们可以给每一个类实现一些函数,丰富它的功能。

比如说,飞机受到攻击就会扣血,我们可以添加一个受到攻击之后的处理函数,再比如飞机移动坐标会发生变化。再比如飞机还可以发动攻击,朝着某个方向开炮……

所以这个类会变成这样:

代码语言:javascript
复制
class Plane {
    int x, y; // 位置
    int health; // 血量
    int attack; // 攻击力
    bool alive; // 是否存活
    void move() {
        // todo
    }
    void beAttack(int att) {
        // todo
    }
    void attack() {
        // todo
    }
}

也就是说我们围绕这个实体,把所有相关的功能都聚合到了一起。当我们把功能当中所有的实体都抽象完成之后,那么一系列复杂的运算逻辑,就可以抽象成实体之间的一系列交互。这样不仅代码更加简洁,可读性也更高。

如果是初次接触面向对象的话,会觉得有些困惑是正常的。但这毕竟不是一个很复杂的思想,随着代码量的增加,很快就能熟悉起来,也就不会觉得困惑了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初探面向对象
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档