2016-09-29 50 views
6

我正在編寫一個初學C++組,我們正在創建一個'Car'類。有人建議'輪胎類型'作爲布爾類型的類的可能變量/屬性。另一個人接着問布爾人是否應該直接以yes/no來回答。對於非是/否應答變量,我應該使用布爾類型嗎?

我只是想知道同樣的。你如何最好地管理一個變量,以及你以後如何爲這個變量指定兩個選項,比如冬季/夏季?

+2

一個布爾值有true或false值,這是相同的是或否,或開或關。如果您需要添加Maybe或Could Be或其他東西,那麼它不再是布爾值。所以不 - 你不應該使用輪胎類型的布爾值。那麼既不是冬天也不是夏天的輪胎,如越野輪胎,賽車輪胎或節省空間的備件? –

+1

取決於是否有兩種可能性之一。如果你只打算使用兩種輪胎類型,那麼布爾值就可以很好地使用。 – DigitalNinja

+3

即使我只有兩種輪胎類型,爲了可擴展性和可讀性,我會在這裏尋找輪胎類型的enum。 – user4581301

回答

11

嗯,這取決於。

您的目標是編寫清晰,可讀,可維護和正確的代碼。這並不是說bool需要一個肯定的答案還是沒有答案的答案,因爲它是否使用布爾值(或其他任何類型)可以幫助你實現這些目標。如果它使你的代碼清晰,那麼值得考慮。如果它使事情混亂,這不是一個好主意。

例如,你可能只有兩種類型的輪胎,但考慮幾件事情:

  • 你怎麼知道你會不會增加更多的以後呢?你不想在腳下射擊自己。
  • 在寫/讀代碼時,你怎麼記得true是「夏天」而false是「冬天」?你必須在頭腦中保持這些信息/總是在某處查找它?容易犯錯誤嗎?它會混淆不熟悉您的代碼的讀者嗎?

想想那些事情。在你的情況下,雖然使用布爾值將會完成工作,但我認爲這對於enum非常有用,即使你現在(或以前)只有兩個值。例如。:

enum TireType { WinterTire, SummerTire }; 

現在一切都屬於地方:

  • 您可以在將來添加新的類型,如果你願意,沒有什麼大的問題。我們只知道t是一種輪胎類型。
  • 輸入值時出錯的機率要小得多:將WinterTireSummerTire混淆非常困難,而truefalse會丟棄所有語義含義。
+1

爲快活的「jinx」評論太遲了,你像美國人(唉!)拼寫「輪胎」,但有一個+1無論如何爲偉大的答案;); ) –

+0

@LightnessRacesinOrbit我對這種拼寫方式非常自我意識。我無法讓自己輸入「輪胎」,但每當我輸入「輪胎」時,我都能聽到OP的呻吟聲。當我到達'enum'時,已經太晚了,不能回頭,所以我只是在努力。 –

+1

#firstworldproblems:D –

7

一個布爾有兩個選項,但這些選項是「true」或「false」(或偶爾是「yes」和「no」)。

我們通常不會將其他變量用兩個選項表示爲布爾值。

如果您有輪胎類型(其中目前有兩種),我建議您使用enum

與往常一樣,也有例外。如果您的輪胎類型是「輪胎上有油」和「輪胎上沒有油」,則可以使用名爲tyreHasOilOnIt的布爾值。

真的,這取決於你。

6

一個布爾類型通常是一個正好有兩個值的值,一個是truthy和另一個是falsy。這在某種程度上可以轉向其他意義。在你看來,當我看到輪胎類型的討論時,我不知道這兩個值是什麼意思,直到閱讀評論。

在我看來,當值不是自我解釋這樣我不會使用布爾值。

就你的情況而言,如果在編寫程序時已知輪胎的類型,我會使用某種enum,如果它們不是簡單的字符串就知道。

+0

........ jinx。 :) –

+0

@LightnessRacesinOrbit oops,我會責怪這個Android應用程序不告訴我有人在我打字的時候回答了哈哈。有一個+1 – Vality

+0

返回atcha先生Vality :) –

0

我建議不要使用enum或bool類型的輪胎類型作爲可能的變量/屬性可能會改變,因爲你指定是/否或冬/夏。它更好地使用它作爲short int,你可以跟蹤或映射關於yes,no,winter,summer的值。這將允許您根據自己的需要進行分配或更改,而班級永遠不需要更改。

Example : 

Class car 
{ 

// we will use tyre type to map enum 
//type and other type if required 

int tyreType;

}; 

enum tyre_type_t 
{ 
//default value is considered 100 
// since we can use previous  
//value any other purpose. 
WINTER = 100, 
SUMMER 
} 

int main() 
{ 
Car obj; 

obj.tyreType = 1; // Yes 
obj.tyreType = 0; // No 
obj.tyreType = WINTER; 
// Now we can assig enum.   
// values  //too. 

return 0; 
} 

編碼快樂

+0

好吧,枚舉實現了您在最後一句中提到的所有內容,同時還提供了語義上有趣的類型名稱以及編譯時類型檢查的附加好處。你有可能誤解了這個問題嗎? OP沒有將「是」和「否」指定爲有效的輪胎類型,只有「冬季」和「夏季」。 –

+0

你可以詳細解釋這個答案@YogeshBadhe - 我不明白你打算如何在這裏使用int。 – hinterbu

0
Example : 

Class car 
{ 

// we will use tyre type to map enum 
//type and other type if required 

INT tyreType;

}; 

enum tyre_type_t 
{ 
//default value is considered 100 
// since we can use previous  
//value any other purpose. 
WINTER = 100, 
SUMMER 
} 

int main() 
{ 
Car obj; 

obj.tyreType = 1; // Yes 
obj.tyreType = 0; // No 
obj.tyreType = WINTER; 
// Now we can assig enum.   
// values  //too. 

return 0; 
} 

快樂的定義編碼

相關問題