2012-06-26 31 views
0

我有兩個問題。結構中的類

  1. 我知道可以在結構中聲明類對象。但從設計的角度來看,這是否合乎道德?

  2. 在我的場景中,我有一個具有大量成員元素的結構,我也想包含一個類對象。這裏我還有一個問題。如果我memset()整個結構類的句柄也重置。所以,我在沒有類對象的情況下檢查結構的其餘部分的大小,並在調用memset()時將其減去,以消除此問題。 (請注意,我使用STL類「排隊」在這裏。我不能使用sizeof()操作的對象,因爲它不會過載。)

但是,這完全做到這一點不可接受的方式?你能提出一些解決這個問題的方法嗎?

+1

道德規範沒有發揮代碼風格。除非你正在編制一個折磨嬰兒的機器。即使如此,使用[Allman大括號樣式](http://en.wikipedia.org/wiki/Indent_style#Allman_style)也是不道德的。 – Nate

+0

@Nate事實上,他們這樣做,OP明確表示「從設計的角度來看」。 C++ FAQ對「道德」編碼參數進行了通用引用。 –

回答

9
  • struct = class(除了默認的可見性)。

  • 如果您擁有「數量龐大的會員」,那麼您可能做錯了事,請更改您的設計,否則會變得棘手。

  • 嵌套類和/或結構是非常好的,它是有意義的。例如,爲實現細節定義嵌套類是很常見的(所以linked_list類可能有node成員類)。

  • 有沒有這樣的事情作爲「類對象」,並不清楚你的意思是什麼。

  • 請勿使用memset - 您可能不需要它,只需使用正常的構造函數和賦值即可。

  • 我不能對象

    錯上使用sizeof()操作符,你可以使用它。

+0

+1 - 不要使用memset_。這比'struct'和'class'之間的區別要重要得多。 –

+0

#1和默認(未合成)的繼承。 –

+0

@John我認爲在可見度下(它*是基類成員對派生類的可見性),因爲我覺得它明顯地減損了重要的一點。 –

0

在C++中,類和結構之間沒有太大的功能差異。爲了與C向後兼容,只在C++中存在結構。因此,可以在結構中有一個類對象。不過,我通常更喜歡只有getter和setter成員變量的結構。我不使用結構中的任何函數來處理數據。如果我需要,那麼我會用課。

1

解決方法是避免帶類和結構的memset,並使用構造函數。在C++ 11中,您也可以在各種條件下使用初始化列表。