'2010/03/04'에 해당되는 글 3건
- 2010.03.04 가상함수테이블
- 2010.03.04 다형성
- 2010.03.04 각 클래스에서 객체 얻기
다형성이란?
다형성이란 모습은 같은데 형태는 다르다는 뜻으로 C++ 기본 철학이고 매우 중요한 개념이지만
어떠한 정형화된 개념은 아니다. C++에는 여러 곳에서 다형성이 사용되며 여기서 2개정도 설명하겠다.
다형성의 사용 목적
: 프로그래머는 프로그램을 만드는것 보다 프로그램을 만든 후 그 프로그램에 대하여 유지, 보수에 더 신경을 써야 하며
더 많은 시간을 투자하게 된다.
다형성은 프로그래머가 프로그램을 만드는데에 있어 클래스와 클래스의 관계를 유연하게 해주어
스펙의 변경, 추가 등에 대하여 유연하게 대처 할 수 있도록 해준다.
다형성을 사용하지 않아도 프로그램은 만들어진다. 단지 나중에 스펙의 변경, 추가 따위에
유연하게 대처 할 수 없을 수 있으며 최악의 경우 프로그램을 처음부터 다시 만들어야 하는 경우가 생기게 된다.
다형성의 특징
: 다형성을 이용하게 되면 하위 클래스에서 상위 클래스의 메서드를 오버라이드하여도
상위 클래스의 메서드들이 호출된다.
멤버 변수도 마찬가지 이다. 하위 클래스에서 멤버 변수에 값을 변경 하여도 상위 클래스에서의 멤버 변수의 값이
호출된다.
예 2가지
1. 오버로딩
C에서는 같은 함수명을 여러번 중복정의할수 없었지만 C++에서는 매개변수명이나 반환형이 다르면 같은 함수명이라도
여러번 중복 정의할 수 있다. 오버로딩도 다형성중에 한 예라고 할 수 고 프로그래머가 어느 함수를 써야될지를 고민하지 않아도 된다.
foo1(int a, int b) foo(int a, int b)
foo2(int c, long d) foo(int c, long d)
2. 동적바인딩
class A
{
virtual void fct(){}
}
class B : public A
{
void fct(){}
}
int main()
{
A * a = new B();
a->fct();
}
a라는 이름의 포인터가 가리키는 대상에 따라서 기능의 형태(호출되는 함수, 혹은 출력결과)는 다르게 나타난다. 이것이 다형성이다. 그리고 class A 와 class B 역시 똑같은 함수를 쓰고 있다. 이것도 다형성의 한 예이다.
MainFrame 얻기 |
CMainFrame *pFrame = (CmainFrame *) AfxGetMainWnd(); |
App 포인터 얻기 |
CTestApp *pApp = (CtestApp *) AfxGetApp(); |
Document 포인터 얻기(새로 만든 클래스에서 얻어올때) |
#include "TestDoc.h" #include "MainFrm.h" CTestDoc *pDoc = (CTestDoc*)((CMainFrame *)AfxGetMainWnd())->GetActiveDocument();
|
View 포인터 얻기(새로 만든 클래스에서 얻어올때) |
#include "TestView.h" #include "MainFrm.h" CTestView *pView = (CTestView*)((CMainFrame *)AfxGetMainWnd())->GetActiveView(); |
자식 Dialog에서 부모 Dialog 포인터 얻기 |
CParent* pDlg = (CParent*)GetParent(); |
부모 Dialog에서 자식 Dialog 포인터 얻기 |
CChild dlg.m_variant; |
CView에서 CDocument 객체 얻어올때 |
GetDocument() |
CView에서 CFrameWnd 객체 얻어올때 |
GetParentFrame() |
CDocument에서 CView객체 얻어올때 |
GetFirstViewPosition(), GetNextView() |
CFrameWnd에서 CView 객체 얻어올때 |
GetActiveView() |
CFrameWnd에서 CDocument 객체 얻어올때 |
GetActiveDocument() |
Afx로 시작하는 함수는 전역함수라 어디서든 사용가능 | |
AfxAbort() |
어플리케이션 무조건 종료 |
AfxMessageBox() |
메시지 상자를 표시 |
AfxGetApp() |
어플리케이션 객체의 포인터 리턴 |
AfxGetAppName() |
어플리케이션 명을 리턴 |
AfxGetMainWnd() |
메인 프레임 윈도우 포인터 리턴 |
AfxGetInstanceHandle() |
현재 인스턴스 핸들 리턴 |
'API & MFC > MFC & COM' 카테고리의 다른 글
프로퍼티시트 적용&도움말 지우기 (0) | 2010.03.11 |
---|---|
디버그모드 & 릴리즈모드 (0) | 2010.03.10 |
사운드출력함수 (0) | 2010.03.10 |
좌표가 영역안에 있는지 확인 (0) | 2010.03.10 |
UpdateData함수 (0) | 2010.03.08 |