![](/img/trans.png)
[英]Make variable read-only after initialization in another function/constructor [C++]
[英]How to create a initialization function that only read once in c++
我有這個課:
class A : public B
並且我需要添加一些受保護的字段:A中的_field,並且我無法觸摸/更改B。現在,B和A中的所有函數都是虛擬的, 但構造函數除外 。 顯然,_field不是B類的一部分。
我需要初始化_field。 如果唯一的構造函數是B,該怎么辦? 另外,是這樣的:
unsigned long _field = 0;
給我一個錯誤編譯。
我通過以下方法解決此問題:
class A : public B
{
protected:
unsigned long _field;
public:
void fooFunction(){
....do other stuff....
static bool isInitField = false;
if (!isInitField){
_field = 0;
isInitField = true;
}
...rest of the function...
}
有沒有更好的方法可以做到這一點而不使用靜態?
謝謝,或者
使用A構造函數並在初始化列表中調用B構造函數,這樣便可以初始化A類的所有字段:
A(unsigned long i, other_paramaters oth) : B(oth),_field(i) {
}
對不起,實際上我還不了解您的問題。 就一次初始化而言,構造函數就是這樣做的地方。 但是您提出的解決方案暗示您還需要其他東西。
函數定義中的static將使_field在類的所有對象之間只能被修改一次,這使_field可以被修改一次有點尷尬。
如果只想初始化_field,則使用初始化。 Esteban的解決方案可以解決。 更好地使用
A(無符號長i,other_paramaters oth):B(oth),_ field(i){}
和
A(參數):B(參數),_ field(0){}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.