我有一個抽象基類,它用於派生一些類。 這些類的一些屬性在所有類中共享,並且這些屬性應該是不可修改的。抽象基類中的靜態常量變量
爲了讓所有10個類共享一個變量,我將它變成靜態的。
class ABC{
public:
static int *anArray;
int index;
static int tot_index;
virtual void print()=0;
ABC(){index=tot_index++;};
virtual ~ABC(){};
};
這工作得很好,tot_index將包含實例化類的數量,並且該指數爲每個類的獨特indentifier。
我遇到的問題是* anArray和派生類的數量是在運行時設置的,在類實例化之後,我不想修改這些值。
我升技迷惑不解:
1)我應該在哪裏設置* anArray價值?只是在派生類的一些隨機?
2)如果一個變量應該是不可修改的,那麼我應該將它設置爲const。但是如果我不知道編譯時的值是什麼,我該如何將它設置爲const?
什麼是你正在試圖解決的根本問題?這很可能是一個更好的設計模式。 – Johnsyweb
如果你定義了tot_index常量,你將無法做到tot_index ++。 –
對於靜態變量,您正在尋求麻煩。在C++中有一個叫做靜態初始化順序失敗(SIOF)的令人討厭的事情。正如同事們所說,這種設計看起來不太好。我不知道你想實現什麼,但是如果你想要的只是註冊基類的實例,可以考慮爲此使用單獨的對象。無論如何,請閱讀有關如何避免SIOF的C++常見問題解答。 – doc