tft每日頭條

 > 生活

 > 怎麼簡單理解面向對象

怎麼簡單理解面向對象

生活 更新时间:2024-07-05 15:46:58

怎麼簡單理解面向對象?豬年伊始,相信大家的朋友圈都被《啥是佩奇》刷屏了講述了一個愛與團聚的故事好吧,我這裡的這篇小文不是告訴大家如何去買春運的票,也不能讓大家說服固執的老人,而是告訴大家如何如何去寫代碼:,接下來我們就來聊聊關于怎麼簡單理解面向對象?以下内容大家不妨參考一二希望能幫到您!

怎麼簡單理解面向對象(基礎篇對象和類)1

怎麼簡單理解面向對象

豬年伊始,相信大家的朋友圈都被《啥是佩奇》刷屏了。講述了一個愛與團聚的故事。好吧,我這裡的這篇小文不是告訴大家如何去買春運的票,也不能讓大家說服固執的老人,而是告訴大家如何如何去寫代碼:

剛入職的時候,師傅也許就告訴你佩奇就是一個紅豬,要你獨自開發一個佩奇禮物的實例,你是否也像這位老爺子一樣不敢對下刷子呢?

這時候我們就需要了解類和對象的概念了

類,就是具有相同屬性和方法的對象的集合

對象則是這類方法的實例

簡單說:而豬是一個基類(父類),佩奇是從豬類中集成出來的派生類(子類),老爺子生産出來的鋼鐵佩奇則是佩奇類再次派生出來類的對象。

我們來看看,如何從“豬”到“鋼鐵佩奇”吧。

首先,“佩奇”作為一個“豬”,可以沿用的包括“頭”、“軀幹”、“尾巴”等等屬性和方法,但是我們知道,佩奇和普通豬并不相同,首先,它是一個粉紅色的;其次,它的頭像一個吹風機;還有,四肢短小纖細……

我們現在有一個Pig類,使用關鍵字class聲明,放在大括号{}内。可以使用private、public和protect對變量或者成員函數進行修飾。使用public修飾的成員變量,在程序的任何地方都可以被訪問,也就是說可以直接被外界調用,這樣很不好,我們通常的做法是把數據隐蔽起來,而把成員函數作為對外界的接口。也就是說,使用private修飾成員變量,這些成員變量不可以被外界直接訪問,而需要通過成員函數進行訪問。還有一類protected變量,則是受保護變量,在繼承時可以訪問,但不允許外界直接訪問。

這時我們知道佩奇為粉紅色,我們是否還需要“void SetColor(color color){itscolor=color;}”呢?顯然不需要,隻需要直接給出顔色就行。這種做法叫做重載。

重載可以使用同樣函數名,但參數不同(數量不同或者類型不同)。在子類中,也可以新增一些變量和函數,比如我們可以描述佩奇的頭部,大約如下:

這裡的void SetColor()就是對之前void SetColor(color color)的重載。

注意,重載并不隻是發生在繼承過程中,我們也可以在同一作用域中聲明幾個類似的同名函數,而這些同名函數的形參列表不同。這裡的part DescribeHead(shape eyes,shape mouth)和part DescribeHead(shape eyes,shape mouth,shape nose)就是典型的重載。

當然,如果在子類中使用了和父類相同的函數,這種做法稱為重定義。比如color GetColor(),這時父類中的函數就被隐藏起來。

還有一種情況,例如我們知道在子類中必須實現,而父類不便于實現的函數,我們可以在父類中使用virtual關鍵字聲明為虛函數,這時,我們稱在子類中實現的過程為重寫(覆蓋)。

在C 語言中允許“多重繼承”,也就是說,一個派生類可以允許有多個直接基類。

比如要實現我們鋼鐵佩奇的實例,需要從PeppaPig和Material類中繼承。如:

這裡,我們再介紹一個不定參數的概念,因為不确定需要多少步驟實現佩奇的制作工藝,因此參數的數量不能限制,用“...”表示,使用宏va_start,va_arg和va_end進行控制。由于此時并不能确定參數的數量,因此将可變參數壓入堆棧,使用指針遍曆堆棧段中的參數列表,從低地址到高地址一個一個地把參數内容讀出來。

其中va_start表示第一個可變參數地址;argptr指針上移一個_INTSIZEOF(method),直至最後,使用va_end(argptr)置空argptr,大緻的含義與argptr=(void *)0類似。

當然,最重要的一步就是将這個類實例化:

其中“.”表示調用了實例ipp中的make()方法。

好吧,最後,祝大家學有所成,都能在佩奇之年有所收獲。

本人學識有限,如有疏漏,歡迎大家留言評論指正。

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved