C++ Chapter 11.5 : Derived Class 에 새로운 기능 추가하기

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 11. 상속 : Derived Class 에 새로운 기능 추가하기

Derived 자식 클래스에서 Base 부모 클래스로부터 상속받은 m_value 에 접근하여 사용하려 할 때

🔔 1. 상속 멤버를 private로 둔 경우

class Base
{
  private:
      int m_value;

  public:
      Base(int value)
          : m_value(value)
      {}

      int & getValue() 
      {
          return m_value;
      }
};

class Derived : public Base
{
public:
    Derived(int value = 0)
         : Base(value)
    {
    }

    void setValue(int value)
    {
      Base::getValue() = value;
    }
};

int main()
{
    Derived d(5);
    
    d.setValue(2);
    
    cout << d.getValue() << endl;  // 2 출력

    return 0;
}
  • m_valueprivate로 둔 경우
    • 그러므로 자식 클래스에서 이를 접근해 조작하게 하려면 setter, getter같은 접근 함수를 부모클래스에서 반드시 구현 해놔야 한다.
    • m_value 에 접근할 수 있는 부모 클래스의 int & getValue() 로 자식 객체에서
      • m_value 값을 바꾸고
        • Base::getValue() = value;
          • 이렇게 L-value로서 작동하려면 리턴 타입이 참조여야 함. int & getValue()
      • 리턴받을 수 있게 되었다.


🔔 2. 상속 멤버를 protected로 둔 경우

class Base
{
  protected:
      int m_value;

  public:
      Base(int value)
          : m_value(value)
      {}
};

class Derived : public Base
{
public:
    Derived(int value = 0)
         : Base(value)
    {
    }

    void setValue(int value)
    {
      Base::m_value = value;
    }
};

int main()
{
    Derived d(5);
    
    d.setValue(2);
    
    // cout << d.m_value() << endl;

    return 0;
}
  • m_valueprotected로 둔 경우
    • 자식 클래스 내에서 m_value 이름으로 바로 접근 할 수 있다.
      • Base::m_value = value;
    • 그러나 외부에서 자식 객체로는 m_value 이름으로 접근할 수 없다.
      • protected라도 외부에서 사용할 멤버라면 getter 접근 함수를 만드는게 좋겠다.

최적화를 위해선 protected가 낫다. 함수를 거치지 않고 바로 접근할 수 있기 때문에.



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

댓글남기기