C語言能否通過結構體實現物件導向程式設計?

時間 2021-05-30 07:14:59

1樓:藍彼得

能!而且在有些嵌入式系統裡就是這麼做的,因為效能和資源。

實際上物件導向語言最終也是通過過程式語言來實現的。

用C語言實現物件導向,首先要手動的構建一些基礎設施,比如你要有乙個基類,用巨集、結構和函式指標來封裝基本的物件導向功能。

繼承乙個類要遵循你自己定義的程式設計規範,基本上就是繼承父類的結構,增加屬於自己域和方法。

......

很多以前編譯器或者直譯器替你做的事情現在需要你自己去做了。

2樓:

物件導向的c?

Redhat不是搞了乙個vala麼?還有gtk以及很多gnome相關的東西,就是用物件導向的方式使用c的,各種彆扭。

另外Go那種方式不叫物件導向,也不支援繼承。Go是基於結構體嵌入以及組合(通過介面來實現)的。Go的方式更類似與ocaml。

3樓:

C語言有個關鍵字typedef,就是用來宣告新的資料型別的。。。常見的做法是給結構體定個新型別,然後用新型別定義變數。。。但是這個新型別是不能繫結函式或方法的,因此也就不能實現封裝、繼承或多型等特徵。。。

也因為這樣,人們發明了C++。由於C++標準是全面相容C語言的,因此也就必要再對C語言進行改造,搞出乙個新的物件導向C了。。。不過,就算這樣還是有人不滿意,所以有了C#和Object-C。。。

4樓:BlueWanderer

除了封裝沒有語法支援只能靠口頭協議以外,別的你就照表面意思實現就行了。

Go沒接觸過,不過按你的描述恐怕Go的結構體就是類。C的結構體本身只能放資料,其他物件導向邏輯你只能自己寫。

c語言實現能否儲存資料?

我來補充一點吧。很多回答說到了檔案讀寫,這是對的,但是乙個應用程式儲存資料到硬碟也有主流的三種方式 1,使用自己設計的檔案格式,就比如說樓上有些回答直接把乙個變數的值寫進檔案,下次開啟程式直接讀檔案來得知上次執行的結果。2,使用 XML,JSON,INI 等檔案格式。其實這些檔案格式說到底還是純文字...

C語言中如何定義可移植的結構體?

專案裡經常遇到類似的情況。我們通常都使用巨集來解決。如 struct myStruct 成員變數型別統一使用 S16 16位有符號數 U16 16位無符號數 S32 32位有符號數 U32 32位無符號數 吳才澤 在真正的多平台移植過程中,結構體定義的可移植性反而不太關注,要關注的是程式本身的可移植...

怎麼使用c語言中的sort排序,在結構體裡面按學號排序??

陳舸 問題描述的不是很清楚,不過我大概猜你是想對某些結構體做排序,結構體裡有個學號的字段,要以學號為標準來排序?可以使用qsort 隨手碼了乙份。include include include typedef struct student Student int compare const void...