簡體   English   中英

如何創建僅在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM