直接蝙蝠我明白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实现这种灵活性?
最近,我用几乎所有的练习和例子读完了K&R.我打算转到"加速C++",我遇到了Axel Schreiner用ANSI-C 编写的 OOP 书.
我很好奇,想要学习它.但是在投入时间之前,我想知道在C中实施OOP的价值.这样我就可以决定花多少时间在它上面.
我认为我在这里提到我的背景是合适的,这样你们就可以更好地指导我了.我大约一年前完成了C,C++,Java和OOP理论,也找到了工作.但是后来Joel的博客和SO让我意识到我缺少很多东西.所以我再次拿起书,开始正确研究它们.
K&R,Accelerated C++,C++算法和其他一些书籍是我努力提高自己的技能.我不是OOP的新手.
那么你会建议什么?
谢谢你的时间.
毫无疑问,C的每个其他学生都注意到了这一点; 这对我来说是新的.
如果我宣布:
int xlate( void *, ... );
Run Code Online (Sandbox Code Playgroud)
然后xlate( )以几种不同的方式定义(也许所有定义,但一个定义#ifdef出来):
int xlate ( char *arg1 ) { ... }
int xlate ( int arg1, char *arg2, int arg3 ) { ... }
int xlate ( char arg1, int *arg2 ) { ... }
Run Code Online (Sandbox Code Playgroud)
并且在xlate()的每个定义中省略对va_list的任何提及 - 从不提及它.然后调用xlate()遵循其中的一个定义,似乎xlate()的每个编译版本都按照我想要的方式工作,至少在gcc和msvc下.
在C99下保证这种放松,不严格,慷慨的编译器行为吗?
谢谢!
- 皮特