C编程语言是否有类似于Java's Object class的东西?我意识到用像C这样的低级语言来实现这样的东西是很困难的,但我认为它可能是非常有用的。如果没有类似于C中的Object
类型,那么有没有什么办法模仿Java的Object
类型?C中的Java对象类型的等价物
主要使用情况是创建与多个原语类型C,阵列以模仿的Java对象数组:Object[] hasMultipleTypes = [3, "Hi!", 5.00];
C编程语言是否有类似于Java's Object class的东西?我意识到用像C这样的低级语言来实现这样的东西是很困难的,但我认为它可能是非常有用的。如果没有类似于C中的Object
类型,那么有没有什么办法模仿Java的Object
类型?C中的Java对象类型的等价物
主要使用情况是创建与多个原语类型C,阵列以模仿的Java对象数组:Object[] hasMultipleTypes = [3, "Hi!", 5.00];
基本对象是不是很复杂 - 设置数据字段( 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
这里有一个错字:'Non_Virutal'。 – 2013-03-06 01:44:25
@AndersonGreen谢谢。固定。 – 2013-03-06 01:58:31
C根本没有类或对象。看看指针和'void *'。 – SLaks 2013-03-06 01:27:12
@SLaks这就是为什么我正在寻找一种方式来模仿他们在C,它不支持他们。有没有什么办法可以用多种类型来创建一个数组,比如(像Java一样)? 'Object [] stuff = [1,“Hello world”,1.00]' – 2013-03-06 01:27:59
C中可以使用面向对象的编程,但它涉及到很多指针和强制类型,并且与为它设计的语言相比看起来有点麻烦。看一些GTK +代码的例子。 – teppic 2013-03-06 01:30:27