파생 클래스의 포인터에 대한 참조 (또는 가능한 경우 포인터)를 기본 클래스 A에 갖고 싶습니다. 이 같을 것이다 : 나는 BaseClassController에 다음에 무엇을하고 싶은 무엇파생 클래스의 포인터에 대한 기본 클래스 참조
BaseDataClass
{
void doSomething();
}
DerivedDataClassA : public BaseDataClass
{
//...
}
DerivedDataClassB : public BaseDataClass
{
//...
}
은 다음과 같습니다 : 데이터 클래스의 존재와
BaseClassController
{
public :
//Constructors, destructor,...
protected :
BaseDataClass *& m_current;
}
DerivedClassAController : public BaseClassController
{
public :
//Constructors, destructor,...
protected :
DerivedDataClassA * m_currentA;
}
DerivedClassBController : public BaseClassController
{
public :
//Constructors, destructor,...
protected :
DerivedDataClassB * m_currentB;
}
이
BaseClassController::someFunction(){
m_current->doSomething();
}
문제가 있다는 것입니다 m_currentA 및 m_currentB가 가리키는 객체는 프로그램의 수명을 통해 많은 변화를 가져올 것이고, m_current 참조가 deriv ed 클래스 포인터가 변경됩니다. 이 같은
DerivedClassAController::changerCurrentA(DerivedDataClassA* ptA){
m_currentA = ptA;
}
을하지 : Concretly, 나는 다음과 같이 할 m_currentA가 가리키는 객체를 변경하는 기능을 원하는
DerivedClassAController::changerCurrentA(DerivedDataClassA* ptA){
m_currentA = ptA;
m_current = ptA;
}
내가 파생 클래스 생성자에서 포인터를 전달하여 시도 :
BaseClassController::BaseClassController(BaseDataClass* pt)
: m_current(pt)
{
}
DerivedClassAController::DerivedClassAController()
: BaseClassController(m_currentA),
m_current(A)
{
}
하지만 결국 m_current가 DerivedClassAController의 DerivedDataClassB를 가리키게되었습니다.
가요? 아니면 더 좋은 방법이 있을까요?
참고 : DerivedClassAController는 m_currentA를 DerivedDataClassA로 사용합니다 (95 %의 시간). 기본 클래스에서 m_current 포인터 만 사용하면 어디에서나 dynamic_cast (m_current)를 넣을 수 있습니다.
'다형성'- 사용해 보셨습니까? 'm_current' 포인터를 통해 필요한 모든 것을 할 수 있습니까? – LogicStuff
'BaseClassController'에서'Virtual BaseDataClass * GetCurrent() = 0;'을 호출하고 두 개의 파생 컨트롤러가이를 구현하고 각각'm_currentA' 또는'm_currentB'의 현재 값을 리턴하도록합니다. –
LogicStuff - 내가 왜 그런지 설명 할 수없는 메모를 추가했습니다. 이고르 - 그럴 수 있습니다! 나는 시도 할 것이다. 그러나 내가 시도한 방식대로 작동하는지 알고 싶습니다. – ElevenJune