2016-08-08 1 views
1

기본 클래스에서 여러 변수를 선언하면 모든 파생 클래스에서 정의됩니다. 맞습니까? 모든 파생 클래스에 대해 한 번 기본 클래스의 변수를 갖기를 원합니다. 예 :기본 클래스에서 고유 변수를 초기화하는 방법 (상속)

class Base{ 
public: 
virtual ~Base(); 

protected: 
Base(); 
int fileIndex; 
}; 

class DerivedA : public Base{ 
public: 
DerivedA(); 
virtual ~DerivedA(); 
void DoSth(); //using fileIndex 
}; 

class DerivedB : public Base{ 
public: 
DerivedB(); 
virtual ~DerivedB(); 
void DoSthDifferent(); //using the same fileIndex 
}; 

어떻게하면됩니까?

+1

이미 완료하셨습니다! 가능한 복제 : [Private and Protected Members] (http://stackoverflow.com/q/224966/514235) – iammilind

+2

파생 된 모든 클래스가 동일한 fileIndex를 사용하기를 원할 때 실제로 무엇을 의미합니까? 모든 답변은 지금까지 상속을 사용하든 사용하지 않든 모든 기본이 동일한 기본 fileIndex 값을 사용해야 함을 의미한다고 이해합니다. 그러나 예를 들어 그 해석을 위해 지나치게 복잡해진 것처럼 보입니다. –

+0

예, 기본 멤버에서 _define_ 이러한 멤버를 한 번만 정의하고 각 인스턴스에 파생 된 하위 버전 상속을 포함하여 별도의 복사본을 저장하거나 모든 인스턴스가 동일한 멤버 ('정적')? _ "다음과 같은 플래그 설명을 따르는 것이 좋습니다. _"특정 문제를 명확히하거나 추가 정보를 추가하여 필요한 것을 정확하게 강조하십시오. 현재 작성된 내용이므로 문의하는 내용을 정확하게 말하기는 어렵습니다. 이 질문. "_ –

답변

2

그냥 fileIndex에게 static 변수를 만들 :이 일부 글로벌 로그 파일 인덱스 아닌 같은 값을 내가 믿고있어

1

를 공유하는 모든 파생 클래스에서

static int fileIndex; 

그런 다음 모든 인스턴스를 그 당신은 깔끔하게 유지해야합니다. static이이를 처리합니다.

상속을 사용하지 않고 구성을 사용하십시오. 액세스를 동기화해야하는 경우

class FileAccessor 
{ 
    int fileIndex; 
    // Your stuff 
}; 

Class A 
{ 
    std::shared_ptr<FileAccessor> mFileAccessor; 
public: 
    A(std::shared_ptr<FileAccessor> fAccesor) : mFileAccessor(fAccesor) {} 

    void DoSth() { /* use mFileAccessor*/ } 
}; 

Class B 
{ 
    std::shared_ptr<FileAccessor> mFileAccessor; 
public: 
    B(std::shared_ptr<FileAccessor> fAccesor) : mFileAccessor(fAccesor) {} 

    void DoSth() { /* use mFileAccessor*/ } 
}; 

int main() 
{ 
    auto fAccesor = std::make_shared<FileAccessor>(); 
    A a{fAccesor}; 
    B b{fAccesor}; 
} 

그런 식으로, 논리는 FileReader 유지됩니다.

개체를 상태로 공유해야하는 경우 상태를 다른 개체로 분해하여 명시 적으로 지정해야합니다.

관련 문제