2011-04-08 178 views
3

項目中的所有C++代碼是否應該封裝到一個類中,而main只需調用該類?或者主函數應該聲明變量和類。組織大型C++項目

+9

將整個'大'項目放在一個類中不是封裝。這是濫用。你當地的消防部門可能需要和你說一句話。 – corsiKa 2011-04-08 03:07:08

回答

10

如果你要建立在C++中一個大的項目,你應該至少是讀Large Scale C++ Software Design by John Lakos它。這有點舊,但聽起來你可以從它的基本原理中受益。

請記住,在任何語言構建大型系統是一個挑戰,需要技巧和紀律,以防止它破爛不堪非常快。不要掉以輕心。這就是說,如果你的「大」的定義與我的不同,那麼我可能有其他的建議給你。我假設你正在談論一個項目,在這個項目中,包含單詞「代碼行」的句子中將會提到「million」這個詞。

+1

即使您使用其他語言進行大型項目,您也應該閱讀Lakos。 – janm 2011-04-08 04:12:21

0

對於大型C++項目,您應該創建很多類!

主要應該只是踢東西了(也許做了幾個看家的東西),然後調用成一個類,將火起來的系統

0

沒有休息!每個頭文件/實現文件對應該代表一個類。將一個大型項目放在一個文件中是災難性的一種方式:項目變得難以維護,編譯將需要很長時間。把你的代碼分解成適當大小的塊。

主要功能不應該申報類,相反,它包含文件(通常命名爲類似的main.cpp,driver.cpp,項目名稱的.cpp)應該使用#include指令,以使編譯器讀取該聲明在頭文件中。閱讀C++的單獨編譯模型以獲取更多信息。

一些初來乍到C++找到編譯模型 - 以及錯誤代碼,當你搞砸了產生 - 難以理解或恐嚇而放棄想這是不值得的。不要讓這是你。瞭解如何正確組織您的代碼。

1

如果它是一類真正有意義的,肯定的 - 但至少IME,這是一個相當罕見的例外,而不是一般規則。

在這裏,我假定你並不是指所有的代碼都在一個類中,但是有一個單獨的頂級類,所以main所做的基本上都是實例化並使用它。反過來,這個類可能會實例化並使用其他從屬類。

如果你真的意味着「應該所有的代碼包含在一個單一的類?」,那麼答案几乎肯定是一個響亮的「不」,除了真正的微不足道的項目。如果所有的代碼都在一個類中,C++中的大部分類的設計(以及大多數其他OO語言)都是毫無意義的。

+0

是的,我認爲他的意思是說,一個叫main的頂級類是調用下級類來做實際工作的「驅動程序」。我可以從來自Java或其他更嚴格的面向對象的語言的人那裏看到這種問題,而不是C++。如果他的意思是第二段,他對「大」的定義確實是有缺陷的。儘管如此,問題並不十分清楚。 – AntonioMO 2011-04-08 04:25:23

1

如果你可以把你的整個項目中一類沒有發神經,你的「大」的定義可能比大多數人的不同在這裏。這很好 - 當你問人們關於「大型」C++項目的時候,請記住,他們會認爲你正在談論的事情需要多個人 - 年才能創建。

也就是說,無論項目大小如何,封裝的相同原則都適用。把你的邏輯和數據分解成有意義的單位,並且不要太捆綁在一起,然後圍繞這些部門組織你的班級。不要害怕嘗試一個組織,然後將其重構爲另一個組織,如果您發現自己複製粘貼代碼,或者如果發現一個組織過於依賴另一個組織。(或者如果你發現自己班級太多,而且你正在創造許多物品來完成一項任務,那麼單個物體會更清潔和更容易。)

玩得開心,不要害怕嘗試一點點。

+0

如果你把所有東西都放在同一個班上,我猜你會比其他人快得多。 – 2011-04-08 11:21:28

0

在C++中,你應該避免把整個項目放在一個class,不管大小。在最大你可以嘗試把它放在1或2 namespace(它可以跨文件分割)。 具有多類的優點,

  1. 更好維護你的代碼的
  2. 把多的.h和.cpp文件類(即小模塊)幫助您快速調試
  3. 如果所有代碼都在一個類中,並且在某個地方進行了更改,然後必須編譯整個項目。相反,如果項目跨越模塊,則可以編譯進行更改的模塊。它節省了很多時間