class Bird
{
public:
virtual void fly() = 0;
virtual void work() = 0;
};
class Eagle : public Bird
{
public:
virtual void fly() {
};
virtual void work() {
};
};
class Tv
{
public:
void upChannel() { };
void downChannel() { };
int getCurChennel() { return m_curChennel; };
protected:
int m_curChennel;
};
class RemoteCon : private Tv
{
public:
void changeChennel(int nChennel) {
while (getCurChennel() != nChennel)
{
if (getCurChennel() < nChennel)
upChannel();
else
downChannel();
}
};
};
class RemoteCon2// RemoteCon : private Tv와 같은 개념
{
public:
void changeChennel(int nChennel);
private:
Tv m_Tv; // tv 객체
};
void RemoteCon2::changeChennel(int nChennel)
{
while (m_Tv.getCurChennel() != nChennel)
{
if (m_Tv.getCurChennel() < nChennel)
m_Tv.upChannel();
else
m_Tv.downChannel();
}
}
int main()
{
// is a , 자식은 부모다 , 독수리는 새이다
Eagle eagle;
Bird *pBird = &eagle; // 독수리는 새의 일종이므로 가능하다. (부모는 자식을 품을수 있다)
Eagle *pEagle = pBird; // 모든 새는 독수리가 아니므로 불가능하다. 컴파일 에러(자식은 부모를 품을수 없다)
// Is-implemented-in-terms-o 자식 클래스 내에서 부모 클래스의 기능중 일부를 사용 하겠다
Tv eagle;
RemoteCon *pBird = &eagle; // 컴파일 에러 다른 객체로 인식한다
}