2012-02-10 124 views
-5

可能重複:
Can you write object oriented code in C?我可以使用C進行面向對象的編程嗎?

我可以用C(不是C++ !!!)爲面向對象編程?

+0

是的,你可以。 X窗口系統做到了(使用void *等)。 – 2012-02-10 08:37:26

+0

雖然可以,但最終可能會浪費99%的時間來編寫大量已經存在於其他基於C的面嚮對象語言的內容,例如C++和Objective-C兩個示例。 – Jasarien 2012-02-10 09:29:06

回答

0

我總是覺得你不能。這就是爲什麼:C++最初被稱爲「C with Objects」。實際上,可能有辦法僞造OOP C,但我不認爲它完全是100%OOP。

重大思想將能夠澄清這一點,雖然

0

有一本書:「用ANSI-C對象導向的編程」。

0

這是一個紀律問題,你必須建立自己的框架並堅持下去。

你會有很多「語法糖」,你不會擁有精心設計的面嚮對象語言所具有的表達之美。但是,你可以。

即使是多態也是可能的,但您必須親自編寫和維護適當的代碼。

STRING to_string(OBJECT o) 
{ 
    switch get_class(o) { 
    case CLASS_OBJECT: 
     return "object"; 
     break; 
    default: 
     return "something"; 
     break; 
    } 
} 

...

1

是的!面向對象的編程是一件好事,並且在C中非常可能。創建對象並不限於C++或任何其他語言。使用C++和其他第四代語言,數據隱藏更容易,並且在編程更容易後,可以自動清理語言。但!爲了讓程序員的生活更輕鬆,總會有一些開銷。

在C語言中使用指針是一種簡單的方法來實現OOP。鏈接列表會立即引發注意。對於(語音)郵件系統,您可以擁有一個包含「包含」消息結構的郵箱結構(當然也包括郵箱自己的數據)。隱藏信息的執行將很容易;所有你必須知道的是該消息有指向其郵箱,前一個消息和下一個消息的指針。當然,你會知道一組函數可以在一個郵箱上運行,另一個功能可以在郵件上運行。

當談到OOP時,C++比C的好處在於C++很容易讓您將方法(實際上是指向它們的指針)放入對象中。事實上,這些方法只是對象的特殊情況....