2014-01-11 3 views
0

두 클래스, AbstractBase이 있습니다. AbstractBase 클래스의 기본 클래스입니다. 기본 클래스의 상수 변수

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는 Abstract :: Abstract()가 아닌 Base :: Base()를 호출합니다. :: 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; 
};