2012-11-07 5 views
1

Possible Duplicate:
it is possible to change return type when override a virtual function in C++?C++ 나는 오류를 얻고있다

기본 클래스에서 다른 반환 값의 형태와 재정 기능 : 난 내 코드를 컴파일

error: conflicting return type specified for âvirtual bool D::Show() 
7: error: overriding âvirtual void A::Show()" 

. 코드는 다음과 같습니다.

class A 
{ 
     public: 
     virtual void Show() 
     { 
     std::cout<<"\n Class A Show\n"; 
     } 
}; 

class B : public A 
{ 
    public: 
    void Show(int i) 
    { 
      std::cout<<"\n Class B Show\n"; 
    } 
}; 

class C 
{ 
    public: 
    virtual bool Show()=0; 
}; 

class D :public C, public B 
{ 
    public: 
     bool Show(){ 
      std::cout<<"\n child Show\n"; 
      return true;} 
}; 

int main() 
{ 
    D d; 
    d.Show(); 
    return 0; 
} 

클래스 C의 Show() 함수를 사용하고 싶습니다. 어디 까지나 오류가 있습니까?

+0

http://stackoverflow.com/a/4222307/1231073 – sgarizvi

답변

6

두 함수의 반환 형식이 같지 않으므로 컴파일러에서 불평합니다. 그 중 하나는 void을 반환하고 다른 하나는 bool을 반환합니다. 두 함수의은 동일한 반환 유형 이어야합니다. 당신이 클래스 AB을 변경할 수없는 경우

당신은

class A { 
    public: 
    virtual bool Show() { 
     std::cout<<"\n Class A Show\n"; 
     return true; // You then ignore this return value 
    } 
}; 

class B : public A { 
    public: 
    bool Show(int i) { 
     std::cout<<"\n Class B Show\n"; 
     return true; // You then ignore this return value 
    } 
}; 

이 있어야합니다, 당신은 void Show() 방법 대신 bool Show() 방법을 가지고 수업 CD을 변경할 수 있습니다. 당신이이 일을 수행 할 수없는 경우

, 당신은 composition over inheritance를 사용할 수 있습니다 유형 B의 일원이 당신의 D 함수 내에서 대신 상속의 :

class D : public C { 
public: 
    bool Show() { 
     std::cout<<"\n child Show\n"; 
     return true; 
    } 
    void ShowB() { 
     b.Show(); 
    } 

private: 
    B b; 
}; 
+0

아니, 난 함수의 반환 형식을 변경하지 못할 ...이 코드를 사용하고 있고 내 자식 클래스에서 C 클래스의 show 함수를 사용하고 싶습니다. – user1805418

+0

컴포지션을 시도 할 수 있습니다 :'D' 함수 대신' B' – alestanis

+0

흠 그게 내 생각 .... 어떤 방법 고마워요 빠른 도움을 많이 .. :) – user1805418

1

을 당신은 중간에 사람을 추가 할 필요가 . 뭔가 같은 :

class C1 : public C{ 
public: 
    virtual bool show(){ /* magic goes here */ } 
}; 

class D: public C1, public B{ 
.... 

이 쇼를 호출하려면, 당신은 뭔가를해야합니다 static_cast<C&>(c).Show();

관련 문제