2010-07-02 2 views
21

이것은 아마도 이전에 물어 보았지만 유사한 질문을 찾을 수 없었습니다.하위 클래스 메서드에서도 가상을 지정해야합니까?

class BritneySpears 
{ 
    public: 

    virtual ~BritneySpears(); 
}; 

class Daughter1 : public BritneySpears 
{ 
    public: 

    virtual ~Daughter1(); // Virtual specifier 
}; 

class Daughter2 : public BritneySpears 
{ 
    public: 

    ~Daughter2(); // No virtual specifier 
}; 

Daughter1Daughter2 클래스 사이에 차이가 :

는 다음 클래스 계층 구조를 고려?

서브 클래스 소멸자/메소드에 virtual을 지정하거나 지정하지 않은 결과는 어떻게됩니까?

감사합니다.

+2

참고 자료 : C++ 11과 밀접한 관련이있는 ['override'] (http://stackoverflow.com/questions/13880205/override-in-c11) 키워드를 살펴보십시오. 그 주제. – ereOn

답변

28

기술적으로는 virtual을 지정할 필요가 없습니다. 기본 메소드가 가상이면 C++은 자동으로 일치하는 재정의 메소드 virtual을 만듭니다.

그러나 virtual으로 표시해야합니다. 결국이 방법은 virtual이며 코드를 훨씬 명확하고 쉽게 다른 개발자가 따르도록 만듭니다.

+0

많은 좋은 해답이 여기 있습니다. 나는 가장 인기있는 것을 choosed했습니다. 여러분 모두에게 감사드립니다. – ereOn

6

가상 클래스는 자식 클래스에서 지정했는지 여부에 관계없이 파생 된 메서드 재정의에서 자동으로 선택됩니다.

주된 결과는 자식 클래스에서 가상을 지정하지 않으면 자식 클래스 정의에서 메서드가 실제로 가상이라는 사실을 알기가 어렵다는 것입니다. 이런 이유로 저는 항상 부모 클래스와 하위 클래스 모두에서 가상을 지정합니다.

8

You do not need it으로 표시하지만 코드를 명확하게 표시 할 수 있습니다.

참고 : 기본 클래스는 가상 소멸자를 가지고 있다면, 당신의 소멸자가 자동으로 가상 입니다. 다른 이유에 대한 명시적인 소멸자 이 필요할 수도 있지만 은 가상임을 확신하기 위해 소멸자를 다시 선언 할 필요가 없습니다. 키워드를 가상 키워드로 선언했는지 여부에 관계없이 가상 키워드없이 선언하거나 을 전혀 선언하지 않아도 가상입니다.