Re: [討論] 念完資工之後...

看板CSSE (電腦科學及軟體工程)作者 (semop)時間18年前 (2007/01/05 01:59), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串9/18 (看更多)
※ 引述《semop (semop)》之銘言: : 我不明白為什麼不可能實現,若好好運用 pointer 或 handle, C 跟 C++ 沒有 : 什麼太大的不同。 : : 推 ykjiang:有沒有不同,要舉實例比較好說明 01/05 01:58 可以參考我寫的那段 C subclassing 的程式碼,以下是比較簡明的對照。 class a { public: virtual int work(); }; class b: public a { public: int work(); }; b obj1; a obj2, *obj3 = &obj1; obj1.work(); obj2.work(); obj3->work(); 就可轉換為: struct _class; struct _class { struct _class* p; // superclass int (*work)(); // member function }; void new_obj(_class* obj, _class* cls) { obj->p = cls; obj->work = cls->work; } _class a = { null, class_a_work }; _class b = { &a, class_b_work }; _class obj1, obj2, *obj3 = &obj1; new_obj(&obj1, &b); new_obj(&obj2, &a); (*obj1.work)(); (*obj2.work)(); (*obj3->work)(); 並沒有什麼系統機制上的重大差異。 比較完整的實作,則是建立兩個 struct, 一個是 member data, 一個是 member function pointer. 建立 object 就是將兩者打包起來。這邊並沒有處理 member data 的部分。 關於 C++ 的動態機制用 C 實作的問題,這部分並不是問題, class 本來就只是 資料和程式碼用同一個名稱來存取,即使是多重繼承也早就被解決了。透過巨集 處理,可以做到相當漂亮的地步。 最麻煩的地方應該是 exception handling, 但也是有等價的結構。 相關的資料和實作在十幾年前就很多了,只是現在很少人知道。 -- ※ 編輯: semop 來自: 61.222.173.26 (01/05 02:47)

01/05 09:06, , 1F
圖書館裡較久之前的書裡確實有看過這些, 不過老實說...
01/05 09:06, 1F

01/05 09:07, , 2F
我看了頭好痛 囧"
01/05 09:07, 2F
文章代碼(AID): #15dK2Th3 (CSSE)
討論串 (同標題文章)
文章代碼(AID): #15dK2Th3 (CSSE)