본문 바로가기

프로그래밍/디자인패턴

(15)
[ST교육] Upcasting & Binding (Composite Patten) Upcasting & Binding // 4_Upcasting #include using namespace std; class Animal { public: void Cry() { cout n;// Rumtime에 결정된 변수 if(n==1)pAnimal = &dog; elsepAnimal = &animal; pAnimal->Cry();// f) return 0; } a), b)는 각각 Animal Cry, Dog Cry가 호출된다. func함수는 Animail의 객체로 Cry를 호출하는 함수이다.c)와 d)는 무엇이 출력될까? 둘 다 Animal Cry가 출력된다. 부모 포인터에 자식 객체의 주소를 담을 수 있기 때문에 Animal Cry가 출력된다.이는 public 상속일 때만 가능하다. privat..
[ST교육] 접근변경자 (드디어 첫번째 패턴 : Adapter) 접근변경자 private, protected, public 에 대해서 알아보자. // 접근변경자_1 #include using namespace std; class Animal { private:// a) protected:// b) public:// c) Animal(){ cout
[ST교육] 생성자소멸자 쉬운 것부터 해보자꾸나 #include using namespace std; class Base { public: Base(){cout
[ST교육] thiscall 4 타이머 함수이다. // 1_thiscall4 #include #include #include #include "misoWindow.h" using namespace std; using namespace misowindow; class Clock; map map_clock; class Clock { string name; public: Clock(string s) : name(s) {} void Start(int ms) { int id = miso_SetTimer(ms,timerRoutine); map_clock[id] = this; } static void timerRoutine(int id) { Clock* pThis = map_clock[id]; cout name OnLButtonDown(); bre..
[ST교육] thiscall 3 멀티스레드 개념을 객체지향으로 캡슐화 해보자. #include #include #include using namespace std; DWORD __stdcall func(void* p) { return 0; } int main() { CreateThread(0, 0, func, "A", 0, 0); } func함수가 함수 포인터로 다른 스레드가 또 실행되고, 그 다음 "A"가 void* p로 전달된다. 아래 코드가 라이브러리 내부에 있는 클래스라고 가정해보자. #include #include #include using namespace std; class Thread { public: void run() { CreateThread(0,0,threadMain,this,0,0); } static DWORD ..
[ST교육] thiscall 2 함수포인터와 멤버 함수 // 2_thiscall #include class Dialog { public: void Close() {} static void Set() {} }; void Open() {} int main() { void(*func1)() = &Open;// a) void(*func2)() = &Dialog::Close;// b) void(*func3)() = &Dialog::Set;// c) void(Dialog::*func4)() = &Dialog::Close;// d) func4();// e) Dialog dlg; dlg.Close();// f) (dlg.*func4)();// g) return 0; } a)는 일반 함수를 일반 함수 포인터에 담는 것이다. 문제없이 실행된다.b)는 멤..
[ST교육] thiscall 1 ST 교육 들었던 것 정리 ! 1. this call 시작하기 전에 먼저 천천히 정리를 해보자! 클래스는 객체의 공통성을 표현하는 정의, 개념, 틀 형식이다. 클래스의 객체는 자신만의 멤버 변수와 멤버 함수를 갖는다. 클래스 내부에서 static으로 멤버 변수와 멤버 함수가 선언될 수 있다. static 멤버변수와 멤버함수는 멤버 변수, 함수보다도 일반 전역 변수, 함수와 비슷하며, 객체가 소유하지 않는 멤버 변수, 멤버 함수이다. 그렇다면 이런 객체가 소유하지 않는 멤버 변수, 멤버 함수를 왜 만드는 것일까? 말 그대로 static 은 객체와 무관한 변수, 함수를 만들 때 쓰인다. #include using namespace std; class Department { static int nCnt; pu..
[디자인패턴] Adapter Patten Adapter Patten 어댑터 패턴 class Base { private:int a;// private : 접근 지정자 protected:int b; public:int c; }; // private : 접근 변경자 class Derived : private Base {}; 어댑터 패턴을 하기전에 이걸 구분하자.class내에 멤버 변수 또는 함수에 접근가능하게 하는 것은 접근 지정자이고, 상속시 사용하는 것을 접근 변경자라고 한다. 이 접근 변경자를 어떤 것으로 선정하는 가가 중요하다. public 상속을 하면, c만 public이 된다.protected 상속을 하면 public c가 protected c가 된다. private 상속은 모든 변수를 private으로 만든다. 모든 변수를 private..