2014-01-11 32 views
0

我有兩個類,AbstractBaseAbstractBase類的基礎。基類中的常量變量

class Abstract 
{ 
public: 
    virtual ~Abstract(); 

    const int     aID; 

protected: 
    // Constructor is protected because this class is abstract. 
    Abstract(int xID) : 
    aID(xID){} 
}; 

#define BASE_CLASS_ID   0x0001 

class Base : public Abstract 
{ 
public: 
    Base() : 
    Abstract(BASE_CLASS_ID){} // change the ID 
}; 

現在對於任何Derived類這個基類,我想使用相同的ID BASE_CLASS_ID。 我如何要求我的所有派生類使用此行爲?

+2

您已經完成了! –

+0

btw,派生將調用Base :: Base(),但不是Abstract :: Abstract() –

+0

你能向我解釋一下嗎?我不認爲Derived會自動調用Base構造函數,還是這樣呢? – kir

回答

0

如果您希望所有派生類都具有相同的常量數據成員aID值,爲什麼不將該數據成員定義爲靜態常量數據成員?例如

class Abstract 
{ 
public: 
    virtual ~Abstract(); 
    enum { BASE_CLASS_ID = 0x0001 }; 
    const static int aID = BASE_CLASS_ID; 

protected: 
    // Constructor is protected because this class is abstract. 
    Abstract() = default; 
};