2010-12-24 4 views
2

두 개 이상의 클래스가 같은 이름, 반환 유형 및 인수를 가진 함수를 가질 때 클래스가 여러 추상 클래스를 상속하면 어떻게됩니까? 여기에서 모든 기능을 가정일반적인 함수로 2 개의 추상 클래스를 구현 하시겠습니까?

클래스 C가 동시에와 B로부터 상속

감사 가상이며 & B 모두 가상 공극 FUNC (INT의 H)를 가지고;

#include <iostream.h> 
class A 
{ 
public: 
    virtual void a_show()=0; 
    virtual void show() 
    { 
     cout<<"A"; 
    } 
}; 
class B 
{ 
public: 
    virtual void b_show()=0; 
    virtual void show() 
    { 
     cout<<"B"; 
    } 
}; 
class C : public A, public B 
{ 
public: 
    virtual void a_show() 
    {} 
    virtual void b_show() 
    {} 
    void show() 
    { 
     cout<<"C"; 
    } 
}; 
void main() 
{ 
    C s; 
    s.show(); 
} 

이 확인에게 :

+0

C에는 func()의 다른 구현이 포함되어 있습니까? – mihsathe

+0

아니요. – jmasterx

답변

2

이 당신이 무슨 뜻인지 경우,

#include <iostream.h> 
class A 
{ 
public: 
    virtual void a_show()=0; 
    virtual void show() 
    { 
     cout<<"A"; 
    } 
}; 
class B 
{ 
public: 
    virtual void b_show()=0; 
    virtual void show() 
    { 
     cout<<"B"; 
    } 
}; 
class C : public A, public B 
{ 
    virtual void a_show() 
    {} 
    virtual void b_show() 
    {} 
}; 
void main() 
{ 
    C s; 
    s.show(); 
} 

코드는 당신이 같은 쇼를 선언 할 필요가

error C2385: 'C::show' is ambiguous 

같은 VC++에 오류를 제공합니다 C를 줄 것이다

0

C + +를 사용하면 상속 된 가상 멤버 함수 (IVMF)도 선택할 수 있으므로 IVMF를 재정의 할 필요가 없습니다. 예제를 빌려 다음과 같이 할 수 있습니다 :

 
class C : public A, public B { 

    public: 

    virtual void a_show() { } 

    virtual void b_show() { } 

    using B::show; 
    // using A:show; // If you want to use show() from A 
}; 
관련 문제