C++/Class 2021. 3. 20. 17:27

상속받은 멤버의 접근 권한 변경

  • using 키워드 사용

    #include <iostream>
    
    class Base
    {
    protected:
      int    i_;
    };
    
    class Derived : public Base
    {
    public:
      using Base::i_;
    };
    
    int        main()
    {
      using std::cout;
      using std::endl;
    
      Derived    d;
    
      d.i_ = 1024;
      cout << d.i_ << endl;
    }
    
    /* stdout
    1024
    */

  • 부모 클래스에서 public인 멤버 함수를 자식 클래스에서 private로 변경할 수도 있다.

    • 함수의 경우 괄호를 쓰면 안된다.
    #include <iostream>
    
    class Base
    {
    public:
      void print()
      {
        std::cout << "I'm Base\n";
      }
    };
    
    class Derived : public Base
    {
      using Base::print;
    };
    
    int        main()
    {
      using std::cout;
      using std::endl;
    
      Derived    d;
    
      d.print();  // 에러
    }
    error C2248: 'Derived::print': cannot access private member declared in class 'Derived'

  • 혹은 delete를 사용해서 함수를 사용하지 못하게 하는게 편할 수도 있다.

    #include <iostream>
    
    class Base
    {
    public:
      void print()
      {
        std::cout << "I'm Base\n";
      }
    };
    
    class Derived : public Base
    {
      void print() = delete;
    };
    
    int        main()
    {
      using std::cout;
      using std::endl;
    
      Derived    d;
    
      d.print();  // 에러
    }
    error C2280: 'void Derived::print(void)': attempting to reference a deleted function

'C++ > Class' 카테고리의 다른 글

C++ 다형성 (Polymorphism)  (0) 2021.03.20
C++ 다중 상속  (0) 2021.03.20
C++ 함수 오버라이딩  (0) 2021.03.20
C++ 상속과 접근 지정자  (0) 2021.03.20
C++ 상속과 패딩  (0) 2021.03.20