2014-03-07 4 views
1

나는 아주 기본적인 문제가 있지만 허용 솔루션 (내 삶의 이야기를) 찾을 수 없습니다 :서브 클래스는

나는 작은을하고 싶습니다 클래스의 생성자로 변경하여 하위 클래스를 만들었으므로 상위 클래스 supersub이라고 부릅니다. sub를 생성 할 때 super의 실제 생성자 중 하나를 호출하고 싶지 않지만 super에는 기본 생성자가없는이 있습니다.

기본 생성자를 추가하기 위해 super 클래스를 편집하는 것은 가능하지만 자주 업데이트되는 라이브러리 (자체 웜 깡통)를 편집해야합니다.

무엇을 조언 하시겠습니까?

답변

4

기본 클래스가 기본 생성자를 제공하지 않으면 사용 가능한 생성자를 호출하지 않고 파생 클래스를 정의 할 수 없습니다.

+0

젠장, 그게 내가 듣고 싶지 않았던거야. – Alexander

1

부모 클래스에서 파생되거나 해당 클래스를 구성을 통해 클래스의 개인 멤버로 사용하는 경우 부모 클래스에서 제공하는 공용 인터페이스가 필요합니다.

기본 클래스가 제공하는 생성자가 만족스럽지 않으면 기본 클래스 구현을 수정하거나 원하는 모든 인터페이스 수정을 추가하여 새 클래스로 다시 작성해야합니다.

0

다른 사람들이 말했듯이 (부모 클래스의 기본 생성자가없는 경우 하위 클래스를 호출 할 수 없습니다.) 불가능합니다.

그러나 보호 된 기본 생성자를 상위 클래스에 추가하면됩니다. 이렇게하면 다른 라이브러리 사용자의 공용 인터페이스가 변경되지 않지만 하위 클래스가이를 호출 할 수 있습니다. 그래서 당신은 sub에서 생성자를 작성하지 않아도 자동으로 sub::sub(int x) : super(x) {}으로 정의된다

class super 
{ 
public: 
    super(int x); 
    // more constructors 
}; 

class sub : public super 
{ 
    using super::super; // now all constructors is here 
}; 

sub::sub(int) 위의 코드에서 : C에서

+0

이 라이브러리는 제 자신이 아니며, FIRST Robotics Competition의 규칙을 준수하기 위해 가장 최신 버전을 유지해야합니다. 변경 될 때마다 수정해야한다는 것을 기억해야합니다. ( – Alexander

1

당신이 당신의 인생을 조금 더 쉽게 생성자 상속을 사용할 수있는 11 ++ 수동으로.

관련 문제