2010-05-21 96 views
0

在標題中,我定義了bool isActive。在從這個派生的類中,我想使isActive默認爲false。我試圖通過添加C++如何將抽象類中的成員變量設置爲默認值?

AbstractClass::isActive = false; 

到cpp文件這樣做,但導致錯誤「之前‘=’令牌預期的構造函數,析構函數或類型轉換。」

回答

9

在類的構造函數初始化:

class AbstractClass { 
    bool isActive; 

    AbstractClass() : isActive(false) { 
    } 

    // ... 
}; 

那類包含抽象方法不能從具有用於初始化它的成員變量構造函數阻止它。

+2

如果有多個ctor,請確保將它設置爲全部。 – pmr 2010-05-21 20:14:23

+0

@pmr:抽象類通常用作虛擬基類。對於虛擬基類,實現除默認構造函數之外的任何東西都是一個壞主意。但是,是的,如果這個班級不被用作虛擬基礎班,那你是對的。 – sbi 2010-05-21 20:20:17

+0

所以答案就是我應該添加:isActive(false)到從AbstractClass繼承的每個類的構造函數? – Roderick 2010-05-21 20:21:38

0

AbstractClass::isActive = false;

是指(不存在)靜態類成員。如果存在,它將作爲整個班級的單個共享實例存在,並且實際上會像您那樣初始化它。

但是你有一個實例變量,這意味着類的每個實例都有自己的副本。要初始化,你會怎麼說;在初始化程序列表中初始化它在類的ctor中,或者在ctor主體中,或者更好,如某種建議。

相關問題