왜 C++에는 아직도 super가 없나요

조회수 9773회

개인적으로 다음 코드 처럼 typedef <Base> super;로 super를 쓰고 있는데 아무런 문제가 없습니다.

super()로 부모 클래스의 생성자 호출도 가능하고, super:: 처럼 namespace도 쓸 수 있고, 그리고 자식의 자식에서도 재정의해서 계속 쓸 수 있는데 왜 C++은 super를 표준으로 만들지 않죠?

class Derived : public Base
{
   public :
    typedef Base super; //protected나 private영역에 있어도 됨
    // 기타
} ;

Derived(int i, int j) : super(i), J(j) //생성자 호출 가능
{}

void Derived::foo()
{
   super::foo() ; //namespace쓸 수 있음
}

class DerivedDerived : public Derived
{
   public :
    typedef Derived super; //상속에 상속에 상속이더라도 쓸 수 있음.
    // 기타
} ;

void DerivedDerived::bar()
{
   super::bar() ; //Derived::bar 호출
   super::super::bar ; //Base::bar 호출
}

이렇게 잘 쓸 수 있는데 왜 C++은 super()가 없을까요? 제가 묻고 싶은 건

  • typedef super처럼 쓰는 게 저 뿐인지
  • typedef super를 쓰는 게 안 좋은 코드인지
  • 왜 아직까지 super가 C++ 표준이 아닌지 입니다

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    super에 대한 논의는 거의 끝났고, 아마 표준으로 등록될 일은 없다고 봐야 합니다.

    Bjarne Stroustrup의 (이탈릭%%%%)Design and Evolution of C++에 써져 있기를 C++ 표준을 처음 만들 때, ISO C++ 표준 위원회가 super 키워드에 대해 생각해 본 적이 있다고 합니다.

    Dag Bruck이 부모 클래스를 "inherited"로 부르자고 제시했었고, 이때는 다중 상속에서 모호성이 문제가 되었습니다.

    Dag Bruck은 이 기능이 구현 가능하고, 기술적으로 안정적(sound)이고, 다중 상속에서도 쓸 수 있다고 주장했는데 기관에서는 들이는 비용에 비해 그만한 가치가 없다고 판단했지요.

    나중에 Michael Tiemann이 질문하신 것과 같은 typedef를 쓰는 방법도 썩 나쁘진 않다고 증명하고 이 논의는 끝났습니다.

    100퍼센트 까지는 아니지만 super가 공식적으로 지원되는 일은 아마 없을 겁니다

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)