C++ Chapter 11.5 : Derived Class 에 새로운 기능 추가하기
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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_value는
private
로 둔 경우- 그러므로 자식 클래스에서 이를 접근해 조작하게 하려면 setter, getter같은 접근 함수를 부모클래스에서 반드시 구현 해놔야 한다.
- m_value 에 접근할 수 있는 부모 클래스의 int & getValue() 로 자식 객체에서
- m_value 값을 바꾸고
Base::getValue()
= value;- 이렇게 L-value로서 작동하려면 리턴 타입이 참조여야 함. int & getValue()
- 리턴받을 수 있게 되었다.
- m_value 값을 바꾸고
🔔 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_value는
protected
로 둔 경우- 자식 클래스 내에서 m_value 이름으로 바로 접근 할 수 있다.
- Base::m_value = value;
- 그러나 외부에서 자식 객체로는 m_value 이름으로 접근할 수 없다.
protected
라도 외부에서 사용할 멤버라면 getter 접근 함수를 만드는게 좋겠다.
- 자식 클래스 내에서 m_value 이름으로 바로 접근 할 수 있다.
최적화를 위해선 protected가 낫다. 함수를 거치지 않고 바로 접근할 수 있기 때문에.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기