C 學習筆記 三

2021-08-31 07:39:02 字數 3769 閱讀 7543

寫在前面的話 : 程式語言的出現是為了讓機器更好的服務人類, 所以越是高階的程式語言人類使用起來就越方便, 隨著計算機硬體的發展高階程式設計終將會被大多數程式設計人員接受並使用。 但是學習c、彙編等與底層語言會使得程式設計人員更好的理解程式設計的原理,這也是乙個程式設計人員的內功心法。

( 物件導向就是一切以物件為基礎。 物件導向語言都是高階語言,而高階語言未必都是物件導向的。 因為相比面向過程物件導向更符合人類的思維方式。 )

舉例理解

注 : 此處參照了一些知乎上的回答,物件導向和面向過程算是計算機的曠世難題

在以前, 我們洗衣服需要 以下流程 :a、盆中倒入洗衣粉 ——> b、 注入清水 ——> c、放入髒衣物 ——> d、 塗上肥皂,用手搓洗 ——> e、 更換清水,洗去清潔殘留物 ——> f、 用手擰乾水分。 如此大致 6步 然後家庭都要有人掌握一門洗衣服的技能, 這時乙個很有想法的人就按照乙個標準的洗衣服的流程提出了 「 洗衣機 」的設計( 這實際上就是我們 c# 中所通常所定義的類 )。於是有需要的家庭, 例如 :小明家, 就買了一台 「洗衣機」回家用 ( 這就是物件的例項化,物件是具體的, 而類是抽象的 )。 只要 new 洗衣機() 並呼叫洗衣機中洗衣的方法 傳入引數 ( 髒衣服 ,洗衣液 ) 就完成了洗衣服的流程。 而乙個 「 洗衣機 」類的創造 可以生產出無數的例項 從而解放了無數的家庭婦女。 讓她們可以從事更多自己想做的事。

這個例項充分說明了 「 物件導向 」 優點:

> 提高了**的重用性、靈活性、擴充套件性

> 使得**變得易於維護

個人理解 : 類算是方法、字段、屬性等集合, 所以說物件導向程式設計中一切皆可為物件, 就是把一切功能重複的**抽象化寫入類中重複呼叫 ( 即 **重用 )。 靈活性的體現在於我們可以根據需求寫功能,在原有基礎上進行擴充套件卻不影響其他例項 ( 即 擴充套件性 )。 我們的例項物件只要呼叫類中自己所需要的那一部分功能即可。 例如 「 洗衣機 」 有快洗、標準、水溫度、還有針對不同型別衣物選擇洗滌模式。 在物件導向中我們可以打包在乙個 「 洗衣機 」類裡。專業術語( 如果以後去面試一點專業術語回答不上就很尷尬了 )

oop ( object oriented programming 物件導向的程式設計 ) , 這是一種計算機程式設計架構。

ooa ( object-oriented analysis 物件導向分析 ), 一種按照物件導向思想來分析問題的方法。

ooad ( object oriented analysis design 物件導向分析與設計 ) ,現代軟體企業廣為採用的一項有效技術。

缺點效能上對比 「 面向過程 」 有所損耗。

封裝 :封裝是一種資訊隱蔽技術, 它體現於類的說明, 是物件的重要特性。 封裝的目的 在於把物件的設計者和物件者的使用分開, 使用者不必知曉行為實現的細節, 只須用設計者提供的訊息來訪問該物件。

繼承 :繼承意味著乙個類隱式地將它的直接基類型別的所有成員當作自已的成員, 但基類的例項建構函式、析構函式和靜態建構函式除外。 繼承具有可傳遞性。

簡單**示例
class

person

}class

student

: person

static

void

main

(string[

] args)

}}

多型:物件導向的多型性表現在 物件根據所接收的訊息而做出動作。 同一訊息為不同的物件接受時可產生完全不同的行動。

主要體現於方法的過載 ( 允許同一類中的多個方法具有相同名稱,條件是這些方法具有唯一的簽名 )
class

person

public

void

print

(int n)

}class

student

: person

static

void

main

(string[

] args)

}}

概念 : 自頂向下、逐步求精、模組化封裝函式主張按功能把軟體系統逐步細分,對每個涉及到的功能都進行一次資料處理然後輸出。由主函式負責把函式中的所有介面串接起來,程式的實現非常強調達到某功能的演算法。每個函式都有唯一的入口和出口。

值引數 ( value parameter ) 用於傳遞輸入引數。 乙個值引數相當於乙個區域性變數, 只是它的初始值來自為該形參傳遞的實參。 對值引數的修改不影響為該形參傳遞的實參。

引用引數 ( reference parameter ) 用於傳遞輸入和輸出引數。 為引用引數傳遞的實參必須是變數, 並且在方法執行期間, 引用引數與實參變數表示同一儲存位置。 引用引數使用 ref 修飾符宣告。

輸出引數 ( output parameter ) 用於傳遞輸出引數。 對於輸出引數來說, 呼叫方提供的實參的初始值並不重要。 除此之外, 輸出引數與引用引數類似。 輸出引數是用 out 修飾符宣告的。

引數陣列 ( parameter array ) 允許向方法傳遞可變數量的實參。 引數陣列使用 params 修飾符宣告。 只有方法的最後乙個引數才可以是引數陣列, 並且引數陣列的型別必須是一維陣列型別。

**示例
class

program

static int refparameter

(ref int n)

//定義乙個方法讓引用引數+1

static

void

outparameter

(int n1,out int out1)

static int arrpatameter

(params int[

] arr)

return sum;

}static

void

main

(string[

] args)

", num)

;refparameter

(ref num)

; console.

writeline

("輸出引用引數的最終值 : "

, num)

;outparameter

(num, out num)

; console.

writeline

("輸出引數的最終值 : "

, num)

; int[

] arr =

;arrpatameter

(arr)

; console.

writeline

("輸出陣列引數的和 : "

,arrpatameter

(arr));

console.

readkey();}}

在學習的吸收轉化率中,主動學習遠高於被動學習,而主動學習中最高的是教授給他人(90%轉化率),希望我所寫的能被更多人所接受,一起成長!

C 學習筆記(三)

c 運算子過載 1 過載運算子的運算順序和優先順序不變,但引數和返回型別是可以重新說明的。2 c 規定,運算子中,引數說明都是內部型別的,不能過載,如 int operator int,int 3 c 還規定了 這五個運算子不能過載,也不能創造新的運算子,如 4 c 規定 這四種運算子必須為成員形式...

C 學習筆記(三)

chapter 3 函式和類的自頂向下設計 1 乙個程式的開發過程 1.問題規範 2.分析 資料需求 3.設計 初始演算法 演算法精化 4.實現 5.測試 2 重要工具 結構圖 3 分析,設計程式時,甚至對任何問題來說,我們都要由大到小,層層分解,由乙個大問題分割成多個相關 的小問題,一口乙個蛋糕是...

C 學習筆記(三)

attributes field modifiers type variable declarators 域的修飾符field modifiers可以是 靜態域和非靜態域 下面的例子清晰的反映了二者之間的區別 域的初始化 如果在類中,沒有顯式的對域進行初始化,系統將賦予其乙個預設值。域的預設初始化分...