본문 바로가기

Programming/기초

private 상속

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;     // 컴파일 에러 다른 객체로 인식한다
}


'Programming > 기초' 카테고리의 다른 글

문자열 비교  (0) 2018.05.26
단순연결리스트  (0) 2018.05.26
문자열 뒤집기  (0) 2018.05.26
버블 정렬 , 삽입 정렬  (0) 2018.05.26
다중 배열 동적 생성  (0) 2018.05.26
자주쓰는 const 위치에 관한 설명  (0) 2018.05.26
추상 클래스 , 인터페이스  (0) 2018.05.26
다중 상속 다이아몬드 상속  (0) 2018.05.26