#include<iostream>
using namespace std;
////////////////////////////////////////////////////////////////////////////////////////
// 추상클래 스이야기
// 순수 가상함수가 1개 이상인 클래스
// 강제로 자식에서 특정 함수를 만들라고 지시하는 것!!!
//
//
////////////////////////////////////////////////////////////////////////////////////////
class Shape{
public :
virtual void Draw() = 0; //순수 가상함수 구현이 없다.
};
class Rect : public Shape //Draw()의 구현을 제공하지 않았으므로 추상 클래스 이다.
{
};
int main(){
Shape s; //구현부가 없으므로 에러가 뜬다 // 추상클래스는 객체를 만들 수 없다.
Rect r; // 에러가 뜬다 사용하고 싶다면 draw()를 만들어야 한다!
}
=========================================================================================
인터페이스의 탄생배경
========================================================================================
#include<iostream>
using namespace std;
// 강한결합 (tightly coupling) : 하나의 클래스 다른 클래스의 이름을 직접 사용 하는것...
// //교체 불가능 경직된 디자인
//스마트폰 제조사와 사람사이ㅔ서의 계약서 (규칙, 인터페이스)를 만들자!
// 모든 스마트폰은 아래 클래스의 자식으로 만들어야 한다.
//
// 약한 결함 (loosly coupling) : 하나의 클래스가 다른 클래스를 사용할떄 부모인 추상클래스를 사용하는
// //접근법! 교체가능한 설계, 유연한 디자인의 핵심!!
#define interface struct
interface ISmartPhone{
public :
virtual void Calling(char *no) = 0;
//더욱이 인터페이스는 한가지 일만하는게 좋다. 모든 스마트폰의 엠피3기능이 있는것은 아니므로 여러개의 interface를 구현하는게 맞다.
}
interface Mp3function{
public :
virtual void music(char *no) = 0;
//더욱이 인터페이스는 한가지 일만하는게 좋다. 모든 스마트폰의 엠피3기능이 있는것은 아니므로 여러개의 interface를 구현하는게 맞다.
}
//규칙이 있으므로 진짜 스마트폰이 없어도 사용하는 코드를 먼저 만들 수 있다.
//규칙대로만 사용하면 된다!!
//
class People{
public :
void UsePhone( ISmartPhone * p ) { p->Calling("010-111-2222");}
};
//이제 모든 스마트폰은 ISmartPhone의 자식이라는 규칙만 지키면된다.
//상송이란 개념을 물려받는 개념...
//때문에 인터페이스의 경우는 인터페이스를 구현해야 한다 라고 표현한다.
class GallexyS : public ISmartPhone{
public :
void Calling(char *no) { cout << "Calling with GallexyS" << endl;}
};
class GallexyS2: public ISmartPhone, public Mp3function{ //s2는 음악까지됨
public :
void Calling(char *no) { cout << "Calling with GallexyS2" << endl;}
};
/*
class People{
public :
void UsePhone(GallexyS *p){p->Calling("010-9179-3197");}
void UsePhone(GallexyS2 *p){p->Calling("010-9179-3192");}
};
*/
int main(){
People p;
GallexyS s;
p.UsePhone(&s);
GallexyS2 s2;
p.UsePhone(&s2);
}
*/
'C,C++ > Android_FrameWork' 카테고리의 다른 글
[SSM 안드로이드 프레임워크 개발 강의]23. 가상함수의 원리와 함수포인터이해 (0) | 2012.08.16 |
---|---|
[SSM 안드로이드 프레임워크 개발 강의]22. 범용적 함수 포인터와 bind (0) | 2012.08.15 |
[SSM 안드로이드 프레임워크 개발 강의]20. 접근변경자와 어뎁터 패턴 (0) | 2012.08.15 |
[SSM 안드로이드 프레임워크 개발 강의]19. 메모리 릭을 체크하는 헤더만들기(operator New , Delete) (0) | 2012.08.15 |
[SSM 안드로이드 프레임워크 개발 강의]18. New 연산자 이야기 (0) | 2012.08.15 |