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