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/cn.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灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP