我最近在C中使用了函数指针.
继续回答你自己的问题的传统,我决定对那些需要快速深入研究这个主题的人进行一些基本的总结.
什么是一组漂亮的预处理器黑客(ANSI C89/ISO C90兼容),它在C中实现某种丑陋(但可用)的面向对象?
我熟悉一些不同的面向对象语言,所以请不要回答"学习C++!"这样的答案.我读过" 面向对象的ANSI C编程 "(当心:PDF格式)和其他一些有趣的解决方案,但我最感兴趣的是你:-)!
另请参见您能用C编写面向对象的代码吗?
假设我必须使用C(没有C++或面向对象的编译器)并且我没有动态内存分配,我可以使用哪些技术来实现类,或者类的良好近似?将"类"隔离到单独的文件中总是一个好主意吗?假设我们可以通过假定固定数量的实例来预分配内存,或者甚至在编译时将每个对象的引用定义为常量.随意假设我将需要实施哪个OOP概念(它会有所不同)并为每个概念提出最佳方法.
限制:
可能重复:
你能用C编写面向对象的代码吗?
C中的面向对象模式?
我记得刚才读到有人(我认为是Linus Torvalds)谈论C++是一种可怕的语言,以及如何用C编写面向对象的程序.在有时间反思的时候,我真的不知道如何所有面向对象的概念都延续到了C.有些事情是相当明显的.例如:
sizeof参数(例如参数)执行一些voodoo你会如何模仿封装和继承?
我想通过使用存储私有成员的嵌套结构可以模拟封装.它可以相当容易地出现,但也许可以被命名PRIVATE或者同样明显的东西,以表明它不应该从结构外部使用.那继承怎么样?
是否可以使用C建模继承?怎么样?示例代码将有所帮助.
编辑:我希望继承数据和方法.仅靠集装箱船无济于事.可替代性 - 使用基类对象工作的任何派生类对象 - 是我所需要的.
我正在与一位同事谈论C和C++,他声称C是面向对象的,但我声称它不是.我知道你可以在C中做类似面向对象的事情,但C++是一种真正的面向对象语言.
你的想法是什么?
此外,它引发了关于谁决定面向对象意味着什么的讨论,并且很难说出面向对象的真正意义.你对此有何看法?
有没有人知道任何提供在C上下文中尝试模型视图控制器设计模式的直接示例的资源?特别是嵌入式系统?
为了澄清,我对C#,C++,Objective-C,Java,PHP或任何更高级别的语言示例不感兴趣.我想知道人们如何使用纯ansi C99甚至C89来解决这种设计模式的问题.也许这在C中甚至没有意义,因为缺乏正式的OOP语言结构?
一些背景:我的同事和我正在研究由基于Arm的PSoC芯片驱动的嵌入式系统.我们可以控制硬件设计和PCB,并且必须进行软件开发以增强我们产品的功能集.我们的模型通常包括从产品中的模拟到数字转换器的数据采集.视图可以是由嵌入式Web服务器供电的网页,或者是具有电容式触摸控制的LCD屏幕.我们的控制器或多或少是管理这两个代码区域之间关系的胶合逻辑.我们有许多不同的产品和变体来支持,因此需要重用代码.
不寻找高度详细或企业级框架.但是相当简单的例子说明了分离编程问题的好策略,但偏向于在较低级别C中找到的习语,例如结构,函数,事件驱动逻辑和一种在C中有意义的抽象消息传递.
由于硬件的性质,我们需要使用C并且必须自己引导很多东西.在某些情况下,我们可以访问操作系统,在其他情况下,只需直接编译到处理器并从主函数开始.所有非常原始的,但寻找允许代码重用的方法,并希望加快软件工程过程.
直接蝙蝠我明白ANSI C不是面向对象的编程语言.我想学习如何使用c应用特定的oo技术.
例如,我想创建几个音频效果类,它们都具有相同的功能名称,但这些功能的实现方式不同.
如果我用更高级别的语言制作它,我会首先编写一个接口,然后实现它.
AudioEffectInterface
-(float) processEffect
DelayClass
-(float) processEffect
{
// do delay code
return result
}
FlangerClass
-(float) processEffect
{
// do flanger code
return result
}
-(void) main
{
effect= new DelayEffect()
effect.process()
effect = new FlangerEffect()
effect.process()
}
Run Code Online (Sandbox Code Playgroud)
如何使用C实现这种灵活性?
我对编程很新,但我一直在阅读StackOverflow关于各种编程方法的一些有趣的讨论.我还不是100%清楚程序编程和面向对象编程之间的区别.听起来像面向对象的编程仍然使用过程(方法),但所有内容的组织方式都不同,因为对象是节目的明星.但在我看来,程序仍然允许你做所有相同的事情.与在C中一样,您可以将所有类似的过程放入库中.你真的不能说C中的库类似于C++中的对象吗?
c ×10
oop ×8
c++ ×1
class ×1
embedded ×1
inheritance ×1
object ×1
polymorphism ×1
standards ×1