2013-03-06 81 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