2013-03-06 77 views
1

C编程语言是否有类似于Java's Object class的东西?我意识到用像C这样的低级语言来实现这样的东西是很困难的,但我认为它可能是非常有用的。如果没有类似于C中的Object类型,那么有没有什么办法模仿Java的Object类型?C中的Java对象类型的等价物

,我在头脑

主要使用情况是创建与多个原语类型C,阵列以模仿的Java对象数组:Object[] hasMultipleTypes = [3, "Hi!", 5.00];

+6

C根本没有类或对象。看看指针和'void *'。 – SLaks 2013-03-06 01:27:12

+0

@SLaks这就是为什么我正在寻找一种方式来模仿他们在C,它不支持他们。有没有什么办法可以用多种类型来创建一个数组,比如(像Java一样)? 'Object [] stuff = [1,“Hello world”,1.00]' – 2013-03-06 01:27:59

+0

C中可以使用面向对象的编程,但它涉及到很多指针和强制类型,并且与为它设计的语言相比看起来有点麻烦。看一些GTK +代码的例子。 – teppic 2013-03-06 01:30:27

回答

2

基本对象是不是很复杂 - 设置数据字段( struct)加上指向虚拟方法表(VMT)的指针。每个成员函数都将指针指向“this”作为第一个参数。

这是比较简单的用C来实现我会寻找原交叉编译器对于C++,其正在做的正是这种的描述 - 转换面向对象的代码转换成普通C.

近似类:

struct MyClassVMT 
{ 
    int *(method1)(); 
} 

struct MyClass 
{ 
    MyClassVMT* vmt; 
    int field1; 
} 

void MyClass_Constructor(MyClass* pThis) { pThis.vmt = &_myClassVmt;} 
void MyClass_nonVirtual (MyClass* pThis) {} 
void MyClass_method1(MyClass* pThis) {} 

MyClassVMT _myClassVmt; 
_myClassVmt.mehtod1 = MyClass_method1; 

// Usage 
MyClass item; 
MyClass_Constructor(&item); 

MyClass_nonVirtual(&item); // non virtual method call 
item.method1(&item); // virtual method call 
+0

这里有一个错字:'Non_Virutal'。 – 2013-03-06 01:44:25

+0

@AndersonGreen谢谢。固定。 – 2013-03-06 01:58:31