나는 이것이 상당히 기본적인 것이라고 생각하지만 여기에서 소스를 찾을 수 없습니다.
파생 클래스에는 기본 클래스에 전달해야하는 초기화 정보가 포함되어 있습니다. 이 경우 메모리 예약입니다.
class Derived: public Base
{
private:
const unsigned short memorySize= 100;
public:
inline Derived() : Base(memorySize) {}
void DoStuff();
};
이것은 비참하게 실패합니다. 기본 생성자가 파생 생성자보다 먼저 호출되고 memorySize는 파생 생성자가 호출 될 때만 할당됩니다.
#define memorySize 100
class Derived: public Base
{
private:
public:
inline Derived() : Base(memorySize) {}
void DoStuff();
};
이것은 예상대로 작동합니다.
내 질문 : 첫 번째 예제의 memorySize가 기본 생성자가 호출 될 때 아직 초기화되지 않았거나 여기에서 다른 일이 발생하고 있다고 가정합니까?
상수에 대한 #define은 C ++에서 바람직하지 않으며 const 값을 사용하는 것이 매우 바람직하다는 것을 배웠습니다. 이것은이 규칙의 예외입니까, 아니면이 상황을 처리하는 더 적절한 방법이 있습니까?
두 가지 예는 완전히 비교할 수 없습니다. 첫 번째 예에서의 모든 인스턴스 Derived
는 memorySize
. 짐작했듯이의 생성자 Derived
가 처리합니다.
당신은 그것을 전혀 원하지 않습니다. 모든 인스턴스에 대해 별도의 상수가 아니라 클래스에 대해 하나의 상수 만 있습니다. 그것은 다음과 같이 쓰여졌습니다.
class Derived: public Base
{
private:
static const unsigned short memorySize = 100;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다