// 의미: 자식에게 반드시 특정함수를 만들게 하는것!
// Abstract Base Class 추상기반클래스
// 강한결합 tightly compling 값에 의한 전달!
// 약한결합 loosely compling 인터페이스에 의한 결합
// 사람과 전화기 제조업자가 지켜야 하는 계약서를 먼저 만든다. ( interface, contract )
// 인터페이스 설계의 중요성 : 확장성, 변화에 유연해 진다.
// 구현 부분이 없기 때문에 메모리를 잡지 않는다.
#define interface struct //왠지 의미전달이 제대로 된다.멋있음.!!!
interface IPhone
{
virtual void Calling( char* num ) = 0;
};
class IMP3Play
{
public:
virtual void MP3Play() = 0;
};
//---------------------------------------------------------------
// 계약에 따른 전화기를 사용하는 객체
class People
{
public:
void UsePhone( IPhone* p ) { p->Calling("119"); }
};
// 모든 전화기는 IPhone 인터페이스를 구현해야(상속 받아서 순수가상함수 재정의) 한다.
class AnyCall : public IPhone
{
public:
void Calling( char* ) {}
};
void main()
{
People p;
AnyCall a;
p.UsePhone( &a );
}