[問題] C++ header file 疑問

作者: maxi326 (尋找獨立遊戲製作團員!)   2016-06-23 15:48:21
最近因為要用到一個開源專案, 需要看裡面的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?
作者: Bencrie   2016-06-23 15:57:00
header 放的是要匯出給其他 source 用的宣告只放必要的東西。dependency 越少越好
作者: bibo9901 (function(){})()   2016-06-23 16:03:00
C++沒有Java的package機制, include是複製貼上而已然後實作寫在header裡通常是因為template
作者: Yshuan (倚絃)   2016-06-23 16:21:00
開發跟release的也許會不同
作者: Caesar08 (Caesar)   2016-06-23 16:46:00
給實際例子,那些專案把實作邏輯寫在.h
作者: chchwy (mat)   2016-06-23 19:39:00
header是服務編譯器的機制 不是服務人的 所以才會那麼怪
作者: james732 (好人超)   2016-06-23 23:02:00
header要弄得很好其實很不容易,亂寫倒是很簡單XD
作者: steve1012 (steve)   2016-06-24 00:59:00
話說不是在討論要不要加package 跟module 進c++20裡了
作者: s25g5d4 (function(){})()   2016-06-24 03:22:00
好像有牽扯到 template 的東西都只能把實作寫在 header裡 因為 compiler 要靠 header 生 code例如 Boost 整個專案幾乎只有 header有時候不是不想把宣告跟定義分開 而是因為現實迫於無奈然後 include 的問題...我覺得 header 應該維持最小 include 原則 實作才需 include 的東西就放在實作裡
作者: uranusjr (←這人是超級笨蛋)   2016-06-24 09:41:00
最小 include 原則也是有得討論, 例如 Google C++ 風格
作者: z1976 (z1976)   2016-06-24 23:22:00
只有實作時才需要用到的就在cpp includeclass會用到的才會在h檔include
作者: rodion (r-kan/reminder)   2016-06-25 02:09:00
等等 不是開源專案就代表都是好的coding style阿~

Links booklink

Contact Us: admin [ a t ] ucptt.com