讨论一下用C语言模拟面向对象
这两天在琢磨用C语言模拟面向对象问题。
觉得这个方面应该需要实现以下功能:
1.同一个类可以有多个对象;
2.支持类成员和类成员函数,使每个对象都能访问到自己的数据成员,但共享成员函数;
3.成员函数被调用时能正确的访到当前对象的数据成员;
4.支持继承。
先说说我的做法,以抛砖引玉:
如果不考虑访问权限的话,
struct中的变量就是class中的成员;
struct中加入函数指针可以当成成员函数;
定义一个实例就是一个类对象了,这可以保证同一个类有多个对象;
在新类中加一个父类struct类型的成员就能模拟继承。
就是第三点觉得很棘手,因为函数无法得到当前对象的数据成员,
比如:
struct Button {
int x ; int y ;
void (*Draw)();
void (*Erase)();
} A , B;
那么如果我写成:
A.Draw();// Draw无法确定被那个对象调用。
我用了一个死办法,就是给每个成员函都多加一个指向自己的指针:
void (*Draw)(struct Button*);
A.Draw(&A); //这样看得很不爽,写得也不爽
各位怎么看这个问题,怎么改进?