面向對象編程之抽象

面向對象編程之抽象

公司投資沒有了,人們陸續都離職了,正好可以抽出個時間看看書,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","記住,紅燈了,要剎車");
    }


我們來總結一下,抽象是什麼?
抽象就是將事物的本質特徵描述出來,根據你的需求來選擇這些特徵。

怎麼樣,抽象出一個類是不是很簡單,你也可以試試。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章