可能重复:
你能用C编写面向对象的代码吗?
C中的面向对象模式?
我记得刚才读到有人(我认为是Linus Torvalds)谈论C++是一种可怕的语言,以及如何用C编写面向对象的程序.在有时间反思的时候,我真的不知道如何所有面向对象的概念都延续到了C.有些事情是相当明显的.例如:
sizeof参数(例如参数)执行一些voodoo你会如何模仿封装和继承?
我想通过使用存储私有成员的嵌套结构可以模拟封装.它可以相当容易地出现,但也许可以被命名PRIVATE或者同样明显的东西,以表明它不应该从结构外部使用.那继承怎么样?
我读到早期的C++"编译器"实际上将C++代码翻译成C并在后端使用了C编译器,这让我很奇怪.我已经掌握了足够的技术知识来解决大部分工作原理,但我无法弄清楚如何在没有语言支持的情况下进行类继承.
具体来说,如何定义一个包含几个字段的类,然后是一堆继承自它的子类,每个子类都添加自己的新字段,并能够作为函数参数交替传递它们?特别是当C++允许你在堆栈上分配对象时,你怎么能这样做呢?所以你甚至可能没有指向隐藏的指针?
注意:我得到的前几个答案是关于多态性的.我知道关于多态和虚方法的一切.我甚至曾经做过一次关于Delphi中虚拟方法表如何工作的低级细节的会议演示.我想知道的是类继承和字段,而不是多态.
可能的重复:
你能用 C 编写面向对象的代码吗?
C中的面向对象编程
所以,据我所知,“对象”基本上只是值和方法的包装器。你不能在 C 中使用structs拥有相同的功能吗?Astruct看起来就像一个简单的class,但是,当然,它没有任何方法。在这里,我们触及了我的问题的核心:我根本不明白为什么需要方法。如果我们有一个只接受指向 a 实例的指针的外部函数,岂不是更简单、更节省内存struct?或者甚至让structs 指向这些函数,但这似乎纯粹是美学......