2013-12-18 5 views
2

상속 계층 구조에서 virtual으로 메소드를 한 번 정의하면 다형성이 작동합니다. 다음의 예 데르 :: F에서 는 (... 그것은 단지가 될 수있다) 자료에서 상속다형성을 작동시키기 위해 상속 계층 구조에서 가상 메소드를 한 번 정의하십시오.

class Base 
{ 
public: 
    virtual void f() { std::cout << "base"; } 
}; 
class Der : public Base 
{ 
public: 
    void f() { std::cout << "der"; } //should be virtual? 
}; 
class Der2 : public Der 
{ 
public: 
    void f() { std::cout << "der2"; } 
}; 

int main() 
{ 
    Der* d2 = new Der2(); 
    d2->f(); 
} 
+1

예, 작동합니다. – David

+1

예. 엄격하게 말하면, 상속 된 클래스에서도 가상 클래스를 사용하는 것이 더 명확 할 수 있습니다. –

답변

3

예, 메소드를 기본 클래스에서 가상으로 만 정의하면 다형성이 작동합니다. 그러나 파생 된 클래스의 메서드 선언에서 항상 가상 키워드를 반복하는 것이 큰 프로젝트와 함께 작업 한 규칙입니다. 클래스가 다른 파일로 선언되는 복잡한 클래스 계층 구조 (많은 상속 레벨)를 가진 많은 파일로 작업 할 때 유용 할 수 있습니다. 그렇게하면 다른 파생 클래스를 추가하는 동안 기본 클래스 선언을 찾고 가상 메서드를 확인할 필요가 없습니다.

3

모든 virtual하지만 d2->f(); 인쇄 der2 내가 VS IDE를 사용하고 있습니다로 정의되지 않은 - 직접 또는 여러 계층을 통해 f()가 선언 될 때 클래스 선언이 명시 적으로 virtual을 배치 한 것처럼 가상합니다.