Re: [好奇] 如何用C做出繼承概念?

看板C_and_CPP作者 (原力副甦)時間15年前 (2010/06/25 17:31), 編輯推噓1(106)
留言7則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《Asker97 (市井小民)》之銘言: 四月號的程序員 有專欄在講這。 有兩個大陸人搞了個叫lw_oopc得東西 LW_OOPC是一套轻量级的面向对象C语言编程框架。它是一套C语言的宏, 总共1个.h文件( 如果需要内存泄漏和调试打印支持,需要增加1个.c文件 (lw_oopc.c,约145行)),20 个宏,约130行代码,非常的轻量级, 但却很好的支持了很多面向对象的特性,比如继承、多态,可以优美的实现 面向接口编程。 可以在sourceforge上找到 http://sourceforge.net/projects/lwoopc/ 裡面的例子蠻清處的,文件也寫的頗詳細。 其說明文件中的: "轻量级的面向对象C语言编程框架LW_OOPC介绍 " 就是刊登在程序員上的文章 剛試了下,真的還蠻好用的。 作者自己認為lw_oopc優缺點如下: LW_OOPC的优点: 1) 轻量级 2) 广泛的适应性,能够适应各种平台,各种编译器 (能支持C的地方,基本上都能支持) 3) 帮助懂OO的Java/C++程序员写出面向对象的C程序。 4) 使用C,也能引入OO的设计思想和方法,在团队的C/C++ 分歧严重时可能非常有用。 LW_OOPC的缺点: 1) 无法支持重载(C语言不支持所致) 2) 不完全的封装(无法区分私有、保护和公有) LW_OOPC的INTERFACE/ABS_CLASS/CLASS三个宏展开后都是C语言的struct, 其成员全是公有的,宏本身并无能力提供良好地封装层次的支持, 所以,只能从编程规范和编程风格上进行引导。 3) 不支持RTTI 既然不支持RTTI,那么显然也无法支持安全的向下转型 (C++中的dynamic_cast的转型功能) 4) 不支持拷贝构造以及赋值语义 5) 转换成接口的表述有点麻烦,表达形式相比C++要囉嗦很多 6) 有学习成本,需要用户学习并习惯这套宏 個人認為他有一個極大的缺點,但這缺點對你我都不存在: 所有程式中的註解,說明文件全用中文 洋人要用鐵定苦不勘言 :D -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.158.204

06/25 20:02, , 1F
還是存在 看不懂簡體字
06/25 20:02, 1F

06/25 21:42, , 2F
丟到WORD轉換
06/25 21:42, 2F

06/26 03:21, , 3F
像是LPC?
06/26 03:21, 3F

06/26 12:05, , 4F
... 沒有RTTI 只能說類似OO 但不是真的OO
06/26 12:05, 4F

06/26 12:24, , 5F
RTTI是OO必要的嗎?我還真不知道...
06/26 12:24, 5F
※ 編輯: Risingforce 來自: 58.115.129.76 (06/26 12:46)

06/27 17:10, , 6F
我認為,如果懂OO的人寫C自然懂得寫出OO的結構
06/27 17:10, 6F

06/27 17:10, , 7F
如果真的要用OO,直接用C++就好了
06/27 17:10, 7F
文章代碼(AID): #1C97TXx1 (C_and_CPP)
文章代碼(AID): #1C97TXx1 (C_and_CPP)