2014-01-11 5 views
0

У меня есть два класса, Abstract и Base. Abstract является базой класса Base.постоянная переменная в базовом классе

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, Derived будет вызывать 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; 
}; 
Смежные вопросы