我有一個類方法,它需要知道一個名為的變數的值,mode它取值 1 和 0,并且是該類的私有屬性。我想撰寫一個可以更改mode為 1 或 0 的 setter 函式。但是,我必須使用列舉來確定我應該設定的新值mode:enum sequence {error=0,active =1};我希望序列成為一個屬性(我希望將其設為私有)班上。如何撰寫一個作為輸入active或error 相應地設定模式值的設定器函式。這是我的代碼的基本結構:
#include <iostream>
class Blink{
public:
void setter(...){
}
private:()
int mode = 0;
enum sequence {error = 0, active = 1};
};
Blink b;
int main() {
b.setter(active);
}
PS:我很難為這個問題想出一個好的標題,不勝感激!
uj5u.com熱心網友回復:
這很簡單。這就是我在 C 11 及更高版本中的做法:
class Blink {
public:
enum class Sequence { Error, Active };
void setter(Sequence s) {
if (s == Sequence::Active) {
mode = 1;
} else {
mode = 0;
}
}
private:
int mode = 0;
};
Blink b;
int main() {
b.setter(Blink::Sequence::Active);
}
主要區別在于Sequence公開宣告。請注意,這mode仍然是一個私有變數,因此沒有害處。序列成為公共介面的一部分,因為它需要從外部理解。
第二個變化是我使用enum class. 是的,您也可以使用隱式轉換為整數的普通列舉,但請參閱為什么列舉類優于普通列舉?
在這個簡單的示例中,我將改為使用私有成員Sequence mode = Sequence::Error;而不是int mode = 0;.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/438339.html
標籤:C
下一篇:轉換為基類時呼叫的模板超類建構式
