2014-04-07 5 views
1

C++ 프로젝트에서 일부 작업을 수행 할 때 문제가 있습니다. C++ OOP 지식 부족에 대해 미리 사과드립니다.C++ 상속 - 부모를 조부모로 변경하기

나는 일련의 클래스가 그 공통의 부모로부터 모든 inheret, 예를 들면 :

class child : public parent 
{ 
    public: 
     ... 
}; 

내 문제를 내가 내 코드에 맞게 부모에 하나 개의 함수를 수정해야한다는 것입니다; 불행히도 (소스에 액세스 할 수있는 동안) 상위 클래스는 다른 프로젝트에서 공유하므로 의도 한 변경으로 인해 다른 사람들의 코드를 손상시킬 수있는 부작용이 발생합니다. 그러나 프로젝트 주인이 승인하면 약간의 변경을 할 수 있습니다. 그리고 대개 부작용이없는 경우 (예 : 범위) 수행합니다.

분명히 원래 부모를 복사하여 수정하고 코드를 효과적으로 분기 할 수 있지만 유지 관리 목적으로는 실제로 그렇게하고 싶지 않습니다.

내 질문 - 원래 부모 클래스를 조부모로 사용하고 조부모 기능을 재정의하는 간단한 한 기능의 부모 클래스를 만들고 새 부모로부터 상속하도록 코드를 변경하는 것이 가능합니까? 조부모에게 전달되는 새 부모에서 구현되지 않은 통화? 그렇다면 어떻게해야합니까 (광범위한 관점에서)? 아니면 더 나은 해결책이 있습니까? 아니면 나는 완전히 벗어난 길인가?

나는 분명히 희망합니다. 어떤 도움을 주셔서 감사합니다, 나는 어둠 속에서 C++로 조금 익살 스럽다.

+0

자녀에게 자체 버전의 기능을 부여 할 수없는 이유가 있습니까? – Mark

+0

당신이 부모에게 기능을 넣고 싶다면 다른 아이들을 해칠 것이라는 우려도있다. 그것은 당신에게 힌트를 주어야하는 것은 아이가 특정일지도 모른다는 것을 암시해야한다. 그래서 이것에 기능을 제공하는 것에서 막을 수있는 것은 무엇인가? 아이가 혼자서 Mark로 제안했습니다. – Madhusudhan

+0

실제로 ~ 30 명의 아이들이 업데이트 된 기능을 제어하고 필요로합니다 (다른 기능은 이전 기능이 필요한 다른 사람이 작성했기 때문입니다). 미안하다. – Caligari

답변

1

기능이 하나의 하위에만 유용 할 것으로 생각되면 해당 코드 만 추가하십시오.

기능이 더 많은 어린이에게 유용 할 것으로 생각되면 해당 부모 클래스에 코드를 추가하고 새 이름을 지정하십시오. 기존의 다른 하위 클래스는이 영향을받지 않습니다. 기존의 하위 항목을 마이그레이션하여 허용 된 시점에서 새 기능을 사용할 수 있습니다.

또는 자식 클래스가 당분간 사용할 수있는 클래스 멤버 함수가 아닌 API 함수를 만듭니다. 다시 말하면, 기존의 자식 클래스와 그 용도는이 변경의 영향을받지 않습니다. 다른 하위 클래스가 해당 기능을 활용해야하는 경우 한 번에 하나씩 마이그레이션 할 수 있습니다. API 함수가 멤버 함수로 승격 될 수 있는지 여부는 향후 결정으로 남겨 둘 수 있습니다.

+0

응답 해 주셔서 감사합니다. 수정 된 함수를 부모에게 새 이름으로 추가합니다. 나는 그것이 지금 가장 좋은 해결책이라고 생각한다. 그리고 다른 기여자가 시간이 지남에 따라 코드를 마이그레이션하도록 설득 할 것입니다 :) – Caligari

1

당신은 지정된 방법 virtual 수 있도록 다른 사람이 자신의 클래스를 변경 할 수 : https://en.wikipedia.org/wiki/Virtual_inheritance

그런 다음 당신도 아이 그것을 무시하거나 새로운 공통의 부모를 만들 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 이제 R Sahu의 솔루션을 사용하겠습니다.하지만 가상 상속에 대해 염두에 두겠습니다. – Caligari