6. http://blog.naver.com/ruvendix
IS A와 HAS A
상속 관계는 IS A가 적절함!
IS A 관계 HAS A 관계
사람 학생
“사람은 학생이다” 이건 거짓
“학생은 사람이다” 이건 참
이런 관계가 IS A 관계
학생
가방
학생은 가방을 가지고 있다
이런 관계가 HAS A 관계
8. http://blog.naver.com/ruvendix
정적 바인딩과 동적 바인딩
정적 바인딩 동적 바인딩
int *pNum = &iNum;
컴파일 타임 때 변수의 값이 고정되는 것!
그게 바로 정적 바인딩
int *pNum = &iNum;
cin >> iSelect;
if (iSelect == 1)
{
pNum = &iSelect;
}
런타임 때 변수의 값이 변하는 것!
그게 바로 동적 바인딩
11. http://blog.naver.com/ruvendix
가상 함수(virtual 예약어)
상속 관계의 동적 바인딩이 일어났을 때 오버라이딩된 메서드를
제대로 호출하려면 가상 함수를 이용하라!
class CParent
{
virtual void Talk(void) // 가상 함수 사용
{
cout << “난 부모다!”;
}
};
class Cchild : public CParent
{
virtual void Talk(void) // 가독성을 위한 표시
{
cout << “난 자식이다!”;
}
}
CParent *pParent = new CParent;
pParent.Talk(); // 부모 메서드 호출
delete pParent;
pParent = new CChild;
pParent.Talk(); // 자식 메서드 호출
delete pParent;
Talk()로 2가지의 작업을 선택할 수 있다!
이게 바로 다형성!
13. http://blog.naver.com/ruvendix
순수 가상 함수
부모 클래스에서는 의미가 없지만
자식 클래스에서는 의미가 있는 메서드가 필요하다면?
순수 가상 함수를 이용하라!
class CShape
{
virtual void Draw(void) = 0; // 순수 가상 함수
};
class CCircle : public CShape
{
virtual void Draw(void) // 가독성을 위한 표시
{
cout << “학교에 갔다!”;
}
}
참고로 순수 가상 함수는 본체를 가질 수 있음!
순수 가상 함수는 객체를 생성할 수 없음!
순수 가상 함수가 있는
클래스를
추상 클래스라고 함!
순수 가상 함수만 있는
클래스를
인터페이스라고 함!