C_and_CPP 板


LINE

最近因為要用到一個開源專案, 需要看裡面的C++ code, 本身對C++不熟 但越看覺得越疑惑, 本身是有JAVA經驗, 同樣是OOP, 看來想法很不一樣 C++跟C一樣, 需要header file, 我自己的直覺是這樣 header負責定義框架, 讓其他人只要看到header, 就知道這個class有些甚麼, 包含 include了那些其他文件, 類別方法的signature, 等等 cpp檔案負責實作這些邏輯, 理想情況下, 一個cpp檔只定義一個類別, 並只include自己 的header file 例如 cup.h #include <string> namespace EX { class Cup { public: drink(); fill(); private: bool canDrink; } } cup.cpp #include "cup.h" Cup::drink() { canDrink = false; } Cup::fill() { canDrink = true; } 但實際上, 我看到的source code, header裡面有include一堆文件, cpp檔又include另一 堆, 然後header裡面定義不止一個class, 而且還有實作邏輯在裡面. 閱讀起來真的是一 種折磨. 我想問的是, C++寫成這樣是一種怎樣的pattern? 因為開源專案都有很多人在寫, 如果 分散成這樣, 應該很難互相合作才對, 所以這種pattern是代表某種大家認同的設計模式? C++的header該負責甚麼內容, 是不是有大家比較公認的pattern? -- --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.228.246.99
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1466668104.A.37A.html
1F:推 Bencrie: header 放的是要匯出給其他 source 用的宣告 06/23 15:57
2F:→ Bencrie: 只放必要的東西。dependency 越少越好 06/23 15:57
3F:推 bibo9901: C++沒有Java的package機制, include是複製貼上而已 06/23 16:03
4F:→ bibo9901: 然後實作寫在header裡通常是因為template 06/23 16:04
5F:推 Yshuan: 開發跟release的也許會不同 06/23 16:21
6F:→ Caesar08: 給實際例子,那些專案把實作邏輯寫在.h 06/23 16:46
7F:推 chchwy: header是服務編譯器的機制 不是服務人的 所以才會那麼怪 06/23 19:39
8F:推 james732: header要弄得很好其實很不容易,亂寫倒是很簡單XD 06/23 23:02
9F:推 steve1012: 話說不是在討論要不要加package 跟module 進c++20裡了 06/24 00:59
10F:推 s25g5d4: 好像有牽扯到 template 的東西都只能把實作寫在 header 06/24 03:22
11F:→ s25g5d4: 裡 因為 compiler 要靠 header 生 code 06/24 03:22
12F:→ s25g5d4: 例如 Boost 整個專案幾乎只有 header 06/24 03:23
13F:→ s25g5d4: 有時候不是不想把宣告跟定義分開 而是因為現實迫於無奈 06/24 03:24
14F:→ s25g5d4: 然後 include 的問題...我覺得 header 應該維持最小 incl 06/24 03:25
15F:→ s25g5d4: ude 原則 實作才需 include 的東西就放在實作裡 06/24 03:25
16F:→ uranusjr: 最小 include 原則也是有得討論, 例如 Google C++ 風格 06/24 09:41
17F:推 z1976: 只有實作時才需要用到的就在cpp include 06/24 23:22
18F:→ z1976: class會用到的才會在h檔include 06/24 23:22
19F:→ rodion: 等等 不是開源專案就代表都是好的coding style阿~ 06/25 02:09







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP