'2010/03/04'에 해당되는 글 3건

  1. 2010.03.04 가상함수테이블
  2. 2010.03.04 다형성
  3. 2010.03.04 각 클래스에서 객체 얻기
                      


출처 - http://cafe.naver.com/gisdev

'프로그래밍 기초 > C++' 카테고리의 다른 글

반올림함수 만들기  (0) 2010.05.11
다형성  (0) 2010.03.04
This 포인터  (0) 2010.01.24
템플릿이란!?  (0) 2009.11.20
Posted by 아몰라

다형성이란?

다형성이란 모습은 같은데 형태는 다르다는 뜻으로 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 역시 똑같은 함수를 쓰고 있다. 이것도 다형성의 한 예이다.

'프로그래밍 기초 > C++' 카테고리의 다른 글

반올림함수 만들기  (0) 2010.05.11
가상함수테이블  (0) 2010.03.04
This 포인터  (0) 2010.01.24
템플릿이란!?  (0) 2009.11.20
Posted by 아몰라

 

 

 

각 클래스에서 객체 얻기

 

 

 

MainFrame 얻기

CMainFrame *pFrame = (CmainFrame *) AfxGetMainWnd();

 

App 포인터 얻기

CTestApp *pApp = (CtestApp *) AfxGetApp();

 

Document 포인터 얻기(새로 만든 클래스에서 얻어올때)

#include "TestDoc.h"

#include "MainFrm.h"

 

CTestDoc *pDoc = (CTestDoc*)((CMainFrame *)AfxGetMainWnd())->GetActiveDocument();

 

GetParentFrame에서 GetActiveDocument 찾기

CDrawDoc * pDoc = (CDrawDoc*)GetParentFrame()->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
Posted by 아몰라
이전버튼 1 이전버튼