當前位置:
首頁 > 最新 > C語言/C加加編程學習—代碼訓練之神奇星空動態繼承

C語言/C加加編程學習—代碼訓練之神奇星空動態繼承

C語言是面向過程的,而C++是面向對象的

C和C++的區別:

C是一個結構化語言,它的重點在於演算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)。

C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程(事務)控制。 所以C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為「 設計這個概念已經被融入到C++之中 」。

C與C++的最大區別:在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為「 設計這個概念已經被融入到C++之中 」,而就語言本身而言,在C中更多的是演算法的概念。那麼是不是C就不重要了,錯!演算法是程序設計的基礎,好的設計如果沒有好的演算法,一樣不行。而且,「C加上好的設計」也能寫出非常好的東西。

上一篇中

Star類的強大之學會了嗎

今天我們繼續來通過這個項目展示一下面向對象的另一個強大之處——繼承

小編推薦一個學C語言/C++的學習裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多乾貨和技術資料分享!

面向對象

代碼復用準備

上一篇中的Star類,Move()函數貌似調用頻率非常高。

雖然代碼量不多,但仔細想想,它可以分成三個功能:

擦除之前的星星

計算新位置

畫出新星星

按照這個功能劃分,我們將Star類的代碼修改如下:

class Star{public:

新加入了三個protected函數,Draw、Remove和NewPos分別負責將「自己」畫在屏幕上、從屏幕上刪除和計算出新位置。

這三個函數代碼都不多,獨立成一個函數是不是有些多餘呢?新加函數後代碼總行數變得更多了。這個問題大家先自己思考一下,我們馬上就能看到它的好處了。

不一樣的星星

假如你是一名程序員,完成上面的代碼之後突然接到這樣的需求變更:「現在的星星有些小,需要改大一點。」這時,你該怎麼改呢?

代碼修改有個原則,在越封閉的區域內修改代碼越安全。如果在上一篇,我們需要在Move()函數中修改一些代碼才能實現這個功能,而現在我們只要修改Draw()和Remove()兩個函數就好了。修改如下:

void Star::Draw(){

最重要的是,即使你修改時寫錯了代碼,也不會影響Move()函數。這兩個函數讓畫圖和計算位置兩部分代碼徹底隔離開了。

如果你覺得這樣很神奇,那麼告訴你,這才剛剛是個開始。

繼承

接下來,需求又變了。需要在程序中加入另外一種矩形的星星。哪有什麼矩形的星星呢?告訴你,程序員經常接到這種毫無道理的需求變更。還是想想如何實現吧。

GIF

小編推薦一個學C語言/C++的學習裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多乾貨和技術資料分享!

首先,現有的代碼都是有用的,要保留。同時,需要新加入矩形星星的類。是不是有人覺得是這樣呢?

class RectStar{public:

再寫一個RectStar類肯定是沒問題的,但我們發現,這個類中的大部分代碼和Star類完全一樣。在後面實現的時候,Init()和Move()兩個函數也不用修改,這樣完全相同的兩份代碼不僅浪費,而且造成後期維護負擔。

正確的方法其實是這樣的,讓RectStar類從Star類中繼承。代碼如下:

class RectStar : public Star

這樣,新的矩形星星就完成了。

小編推薦一個學C語言/C++的學習裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多乾貨和技術資料分享!

我們再把main函數做些修改如下:

void main()

好了,現在我們的程序中就會多出一些奇怪的矩形星星。哎呀,矩形的星星真的好難看。

不過,用繼承來實現這個功能真的很炫,不是嗎?

這些是C/C++能做的

伺服器開發工程師、人工智慧、雲計算工程師、信息安全(黑客反黑客)、大數據 、數據平台、嵌入式工程師、流媒體伺服器、數據控解、圖像處理、音頻視頻開發工程師、遊戲伺服器、分散式系統、遊戲輔助等


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 小辰帶你學知識 的精彩文章:

TAG:小辰帶你學知識 |