面向对象编程之抽象

面向对象编程之抽象

公司投资没有了,人们陆续都离职了,正好可以抽出个时间看看书,C++ Primer第四版,以前粗略的读过一遍,但是一直感觉好多地方就那么过去了,读书这个事情就是这样,每读一遍,都能有许多新的感悟,所以才有那句温故而知新,我是一个不爱读书的人,但是我还是建议大家多多读书,读书百遍,其义自现。好了,感觉再说废话就多了,我们开始吧。

面向对象的概述

面向对象编程总是基于三个概念:抽象,继承,多态。不同的语言或者文章可能对这三个概念的叫法不一样,但是讲解的都是一样的。抽象,这个相信大家已经听过很多种版本的解释了,这里我想用几个例子来阐述一下我的认识。我认为抽象,就是一些特性的集合,他不是具体的东西,他是一类具有相同特性的东西的集合或者说是抽离,好了,越说越离谱了,我们举个例子。首先举得例子就是汽车,我认为汽车就是一种抽象,那就有同学问了,汽车怎么是抽象啊,满大街都是汽车,照你这么说,都是抽象了。

那好,我们说什么是汽车,

1.有轮胎,一般是四个,但是也有三个的或者六个的等等。

2.有发动机,当然现在有电动汽车,我们就认为马达是发动机。

3.需要燃料,汽油,柴油,或者电,都是能源。

4.有外壳,汽车都是有外壳的,如果没有,那是卡丁车了。

5.有品牌,比如奔驰,宝马,福特,奇瑞,长城等等。


那么根据这个5个特性,我们是不是可以抽象出一个汽车的类呢,我们就可以这么写。


class Car
{
public:
    int _tyre;      //轮胎数量
    int _engine;    //发动机型号
    int _fuel;      //燃料 1汽油 2柴油 3电 4其他
    int _shell;     //外壳类型 我们这里相区分外形 1轿车 2越野车 3皮卡
    std::string _trademark; //品牌 宝马,奔驰,福特,奇瑞,长城等等
};

我们就这么抽象除了一个类,怎么样是不是很简单,那么有同学就又问了,我现在想要一辆宝马5系,怎么办呢?那我们就创建一辆车,就是新建类的一个实例。
    Car *bmw5 = new Car();
    bmw5->_tyre = 4;    //四个轮胎
    bmw5->_engine = 0;  //我也不知道
    bmw5->_fuel = 1;    //97号汽油
    bmw5->_shell = 1;   //轿车
    bmw5->_trademark = "宝马";
这样一辆具体的车就出来了,宝马5系,这就是类的实例化。怎么样,抽象是不是很简单。当然如果你需要知道车的颜色,那么你就再加一个属性 int _color;就ok了。总之抽象的属性,还是要看需求,也就是你需要知道哪些属性。
下面又说了,汽车是出来了,但是就是让我们看着吗,当然不是了,下面我们就给Car这个类加上两个成员函数,让汽车可以跑起来,当然还要有刹车,要不可就危险了,如下
    void run()
    {
        printf("%s","汽车得跑起来才是汽车啊");
    }
    
    void stop()
    {
        printf("%s","记住,红灯了,要刹车");
    }


我们来总结一下,抽象是什么?
抽象就是将事物的本质特征描述出来,根据你的需求来选择这些特征。

怎么样,抽象出一个类是不是很简单,你也可以试试。







你可能感兴趣的:(面向对象编程)