看板 C_and_CPP 關於我們 聯絡資訊
用 cfront 來測試。 t.h #ifndef t_h #define t_h #include <stdio.h> class Base { public: Base() { printf("Base ctor\n"); num_ = 5; } ~Base() { printf("Base dtor\n"); } int get_num(); private: int num_; }; class D1 : public Base { public: D1() { printf("D1 ctor\n"); a_ = 12; } ~D1() { printf("D1 dtor\n"); } private: int a_; }; class D2 : public Base { public: D2() { printf("D2 ctor\n"); b_ = 78; } ~D2() { printf("D2 dtor\n"); } private: int b_; }; #endif t.C #include "t.h" int Base::get_num() { return num_; } m.C #include "t.h" int main(int argc, char *argv[]) { D1 d1; D2 d2; printf("d1.num: %d\n", d1.get_num()); printf("d2.num: %d\n", d1.get_num()); return 0; } 編譯指令 main_fn=t cpp-5 -Iincl-master/incl-linux32/ $main_fn.C > $main_fn.i # 處理 header files ./cfront +a1 +L +f$main_fn.C < $main_fn.i > $main_fn..c # 將 cpp 檔 (.C) 轉成 .c 檔 main_fn=m cpp-5 -Iincl-master/incl-linux32/ $main_fn.C > $main_fn.i # 處理 header files ./cfront +a1 +L +f$main_fn.C < $main_fn.i > $main_fn..c gcc-5 m..c t..c m.cdts..c ./libC.a -o m2 執行結果 ./m2 Base ctor D1 ctor Base ctor D2 ctor d1.num: 5 d2.num: 5 D2 dtor Base dtor D1 dtor Base dtor 好奇測試了一下, 不算太難, 連 ctor/dtor 都送給你了。 只是轉出的 ..c code 超級難看就是, 但用 macro 自己來, 應該也不會簡單到哪裡。 應付最基本的繼承語法應該是綽綽有餘。 用 c89 應該也是沒問題。 ※ 引述《DJWS (...)》之銘言: : // C99 : struct SuperClass { : int num; : }; : struct ClassA { : int num; : int a; : }; : struct ClassB { : int num; : int b; : }; : struct ClassA objA = { : .num = 0, : .a = 0 : }; : struct ClassB objB = { : .num = 0, : .b = 0 : }; : void func(void* obj) : { : struct SuperClass* object = obj; : object->num++; : } : int main(void) { : func(&objA); : func(&objB); : return 0; : } : 我想做類似的事情,請問在C99要怎麼寫? : 不能使用malloc -- 紙上得來終覺淺,絕知此事要躬行。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.218.53.138 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1576226744.A.6FE.html ※ 編輯: descent (61.218.53.138 臺灣), 12/13/2019 16:56:36
DJWS: 謝謝 我會考慮看看 12/13 18:11