부모와 자식클래스 가상 함수의 반환타입을 다르게 재정의 할 수 있을까? (Overriding, Return Value)
가상 함수 코드를 보다가, 우연히 부모클래스의 가상 함수와 자식클래스의 가상 함수의 리턴 타입이 다르다는 것을 본 적이 있습니다. 혹시, 부모 클래스에서 상속 받은 가상 함수의 리턴 값이 달라도 상관 없다는 것을 아시나요? 물론, 이 포스팅을 검색해서 들어오셨다면, 그 사실을 모르셨거나, 정확한 이유가 궁금해서겠죠. 먼저, 답부터 말하면 가능합니다. 그런데, 일반적으로 오버라이딩을 공부하신 분이라면 반환 타입이 같아야 한다는 것은 모두 아는 사실인데, 그럼 불가능한 것이 아닌가라고 생각하실 수 있습니다. 그래서 열심히 구글링해본 결과, 부모 클래스의 함수 타입에 대해서 상속받은 클래스의 함수가 대체가능하다면 반환타입이 달라도 된다고 합니다. 말로만 설명하면 이해하기 어려우므로, 바로 간단한 예제로 설명하..
2019. 6. 27.
C++ virtual, override, final 키워드별 사용하는 이유를 알아보자.
C++을 입문하시면서, 상속에 관해서 공부를 하셨을 거에요. 이때, 나오는 키워드가 virtual 입니다. 때문에, virtual 이라는 키워드는 꽤나 눈에 익으셨을텐데요. 혹시, override와 final도 오버라이딩에서 사용하는 키워드라는 것을 아시나요? 사실, override와 final은 C++11 이후에 등장합니다. 때문에, 못 보셨을 수도 있습니다. 하지만, 새롭게 추가된만큼 어딘가에 사용하면 유용하다는 뜻이겠죠? 이번 포스팅에서는 virtual, override, final 키워드가 각각 어떠한 경우에 사용하는 지에 대해서 정리하도록 하겠습니다. 일단, 각 키워드가 무엇을 뜻하는 지 알아보자. 위에서 말한 것처럼, virtual, override, final은 모두 상속 관련 오버라이딩을 ..
2019. 6. 18.