반응형
가상함수를 priviate 멤버로 선언하면 자식 클래스에서 재정의가 가능할까?
결론부터 말하자면 재정의 가능 이다
c++의 규칙 : "상속받은 private 가상 함수를 파생 클래스가 재정의 할 수 있다."
이 함수는 재정의해 놓고 호출할 수도 없는데 설계상의 모순이 아닌가? 라는 생각이 들 수 있다.
그러나 가상 함수를 재정의하는 일은 어떤 동작을 어떻게 구현할 것인가를 지정하는 것이고,
가상 함수를 호출하는 일은 그 동작이 수횅될 시점을 지정하는 것이다.
따라서 이 경우에, 어떤 기능을 어떻게 구현할지를 조정하는 권한은 파생 클래스가 갖게 되지만,
함수를 언제 호출할지를 결정하는 것은 기본 클래스만의 고유 권한이다.
출처 : 책 Effective C++ 제3판
그렇다면, 가상함수를 private으로 생성할 때의 이점은 무엇일까?
이것도 결론부터 말하자면, 상속받은 자식 클래스에서 해당 함수 구현을 필수로 하고 (사용을 원한다면)
현재 구현부는 본인만 사용하기 위해서이다.
private으로 선언된 함수는 본인만 호출할 수 있다.
자식 클래스에서 재정의한 virtual function은 자식 클래스 내에서만 호출이 가능하다.
자식 클래스에서는 부모 클래스의 private virtual function을 호출하여 사용할 수 없다.
출처 : stackoverflow 'What is the advantage of making a private method virtual in C++?'
https://stackoverflow.com/questions/2170688/private-virtual-method-in-c
반응형