C语言中的面向对象编程

4

2
试图将一个正方形的OO钉子锤入一个圆形的C洞中将导致重写C++。只需使用C++或另一种语言即可。 - Andy_Vulhop
我并没有问“是否可能?”,而是“如何实现”。由于GTK+、GGlib以ANSI C的面向对象风格完成,因此它们很可能有存在的合理性。 - drahnr
4个回答

7
  1. Objective-C 不是 C 语言,它是一种不同的语言。
  2. C 语言不是面向对象的语言。虽然可以进行一些面向对象的编程,但这不是它的设计目的。
  3. C 语言中最佳实践是过程式的。

1
  1. 我知道这一点,问题并不涉及Objective-C,我甚至也没有提到它。
  2. 这正是我的观点。我知道它是为过程式编程而设计的,但没人说我只想用它来做它原本被设计的事情。
  3. 见2。
  4. 如果你完全不回答我的问题,我认为我已经明确说明了要点:我想知道如何做而不是它是否值得这么做,所以要么回答我的问题,要么就不要回答。这是劫持话题。
- drahnr
@penguinpower:我提到Objective-C的原因是你其中一个标签是[objective-c]。我并不是说在C中做OO不可行,只是从你的问题中看出你似乎没有意识到这个区别。我不是想抢了你的问题 - 我只是想帮助解决基础问题。 - Skilldrick
一定是打错了,我是用手机发的帖子,不幸的是我的德语自动补全功能有问题 :/ 如果你觉得我的评论有冒犯之嫌,那并不是我的本意。 - drahnr
@penguinpower:好的 - 没问题! - Skilldrick

7
这是一个关于此主题的书籍链接:http://www.planetpdf.com/codecuts/pdfs/ooc.pdf(Ansi-C中的面向对象编程 - 恰好是您正在寻找的内容)。
祝你好运并有耐心。在C语言中编写OOP并不容易,但如果你喜欢极端的事情,它可能会有些回报!
另一个起点是检查GObject:http://library.gnome.org/devel/gobject/,正如@unwind所说,GTK是在C语言中使用OOP概念的很好的示例。您还可以看看GLib,这是一个很好的库,肯定会让您的C编程生活更加轻松,它以OOP方式编程,并且作为附加功能是可移植的!

GTK+是我想要使用的用户界面,因此我“想要”学习如何正确使用它。但不幸的是,我更喜欢逐步讲解而不是反向工程,因为后者需要更多时间。 - drahnr
如果你想使用GTK+,并不仅限于C语言。还有其他语言的绑定,因此你可以使用以下语言开发GTK应用程序:C++、Python、Vala、C#甚至Java。 - Andrei Ciobanu
我也知道这一点,但我想/需要/更喜欢重用一个现有的 GPLv2 项目中以面向对象方式编写的 C 代码,这才是关键,而且我不会使用 extern 或 C++ hackz。从长远来看,我期待着 Linux 内核(非常长远的未来)。 - drahnr
我建议你尝试一下COOP。它具有类、继承、异常、单元测试等功能。 - Shmuel Fine

4
我建议看一下GTK+ GUI工具包的内部。它是一个用C语言编写的面向对象系统,展示了你想要的技术。它是开源的,所以没有什么阻止你去阅读并学习它。

1

面向对象机制并不是 C 语言的特性。您需要在 C 的过程性本质之上添加自己的逻辑来模拟面向对象。

我不建议在 C 中应用 OOP 的每个方面。尽管封装相对容易实现,但在一种不为此而设计的语言中实现继承将非常丑陋。

关于这方面的好教程:http://www.planetpdf.com/codecuts/pdfs/ooc.pdf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接