<4D F736F F F696E74202D203032C0E520C0AFC6BFB8AEC6BC20C5ACB7A1BDBABFCD20C1FDC7D520C5ACB7A1BDBA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

Similar documents
Microsoft PowerPoint - hci2-lecture2.ppt

쉽게 풀어쓴 C 프로그래밍

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

1장 윈도우 프로그래밍 들어가기

슬라이드 1

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - [2009] 02.pptx

PowerPoint Presentation

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - chap11-포인터의활용.pptx

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

C++ Programming

슬라이드 1

chap 5: Trees

설계란 무엇인가?

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

chap x: G입력

Microsoft PowerPoint - chap10-함수의활용.pptx

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

C프로-3장c03逞풚

MFC 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch07 - 포인터 pm0415

쉽게 풀어쓴 C 프로그래밍

설계란 무엇인가?

윤성우의 열혈 TCP/IP 소켓 프로그래밍

슬라이드 1

PowerPoint 프레젠테이션

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

BMP 파일 처리

제목

PowerPoint Presentation

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

Microsoft PowerPoint - chap12-고급기능.pptx

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

쉽게 풀어쓴 C 프로그래밍

03_queue

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

PowerPoint Presentation

Visual C++의 개요

C++ Programming

쉽게 풀어쓴 C 프로그래밍

K&R2 Reference Manual 번역본

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

설계란 무엇인가?

슬라이드 1

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

KNK_C_05_Pointers_Arrays_structures_summary_v02

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

PowerPoint Template


<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

슬라이드 1

Chapter_02-3_NativeApp

설계란 무엇인가?

Lab 3. 실습문제 (Single linked list)_해답.hwp

4. 1 포인터와 1 차원배열 4. 2 포인터와 2 차원배열 4. 3 포인터배열 4. 4 포인터와문자그리고포인터와문자열

untitled

Microsoft PowerPoint - Chapter_09.pptx

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Microsoft PowerPoint - 04-UDP Programming.ppt

윤성우의 열혈 TCP/IP 소켓 프로그래밍

Microsoft PowerPoint - 09-CE-7-선과 도형

ALTIBASE 사용자가이드 Templete

PowerPoint 프레젠테이션

11장 포인터

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

080629_CFP °ø°³¿ë.hwp

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

PowerPoint 프레젠테이션

Chapter #01 Subject

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Slide 1

ThisJava ..

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

Data structure: Assignment 3 Seung-Hoon Na December 14, 2018 레드 블랙 트리 (Red-Black Tree) 1 본 절에서는 레드 블랙 트리를 2-3트리 또는 2-3-4트리 대한 동등한 자료구조로 보고, 두 가지 유형의 레

PowerPoint 프레젠테이션

Chapter 1. MFC 시작하기

Microsoft PowerPoint - Chapter 6.ppt

06장.리스트

PowerPoint Template

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

윈도우 프로그래밍의 개념

슬라이드 1

02장.배열과 클래스

그래픽 프로그래밍

Microsoft PowerPoint - Java7.pptx

2002년 2학기 자료구조

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Transcription:

02 : 02 유틸리티클래스와집합클래스 학습목표 유틸리티클래스를이용하여객체생성법과사용법을익힌다. MFC 에서 C++ 의업캐스팅이적용되는원리를이해한다. 배열, 리스트, 맵클래스동작원리와사용법을익힌다.

콘솔응용프로그램 특징 메시지구동방식을사용하지않으므로 C/C++ 언어에대한지식만있으면곧바로실습이가능하다. 상당수의 MFC 클래스를사용할수있다. 유틸리티클래스, 집합클래스, 파일입출력클래스,... 알고리즘을개발할때유용하다. 1

MFC 콘솔응용프로그램작성 (1/2) 프로젝트생성 2

MFC 콘솔응용프로그램작성 (2/2) 1 단계옵션설정 3

MFC 콘솔응용프로그램분석 (1/5) 파일구성 StdAfx.h, StdAfx.cpp 미리컴파일된헤더 Console.rc, Resource.h 리소스정보 Console.h, Console.cpp 구현코드 4

MFC 콘솔응용프로그램분석 (2/5) Console.cpp 코드 CWinApp theapp; // 유일한전역응용프로그램객체 using namespace std; // 표준 C++ 라이브러리를사용할수있도록한다. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nretcode = 0; if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine( ), 0)) { cerr << _T("Fatal Error: MFC initialization failed") << endl; nretcode = 1; } 5

MFC 콘솔응용프로그램분석 (3/5) Console.cpp 코드 (cont d) else { CString strhello; strhello.loadstring(ids_hello); cout << (LPCTSTR)strHello << endl; } } return nretcode; 6

MFC 콘솔응용프로그램분석 (4/5) 문자열리소스 7

MFC 콘솔응용프로그램분석 (5/5) 실행파일생성과정 API & MFC 라이브러리 C/C++ 라이브러리 console.h, stdafx.h console.cpp, stdafx.cpp 컴파일러 console.obj stdafx.obj resource.h 링커 console.exe console.rc 각종리소스 ( 문자열, 아이콘,...) 리소스컴파일러 console.res 8

유틸리티클래스 (1/3) API 데이터타입 - 기본형 데이터타입 BOOL 또는 BOOLEAN BYTE, WORD, DWORD, LONG 정의 TRUE 또는 FALSE 8 비트, 16 비트, 32 비트, 32 비트 ( 모두 unsigned) U* unsigned * 예 ) UCHAR, UINT, ULONG,... HANDLE H* 32 비트핸들 * 을가리키는핸들예 ) HBITMAP( 비트맵 ), HBRUSH( 브러시 ), HCURSOR( 커서 ), HDC( 디바이스컨텍스트 ), HFONT( 폰트 ), HICON( 아이콘 ), HINSTANCE( 인스턴스 ), HMENU( 메뉴 ), HPEN( 펜 ), HWND( 윈도우 ) 9

유틸리티클래스 (2/3) API 데이터타입 - 기본형 (cont d) 데이터타입 P* = LP* (L)PSTR, (L)PCSTR (L)PTSTR, (L)PCTSTR COLORREF 정의 * 에대한포인터예1) PBOOL, PBYTE, PLONG,... 예2) LPBOOL, LPBYTE, LPLONG,... ANSI 문자열 ANSI 또는유니코드문자열 32비트 RGB (red, green, blue 각각 8비트 ) 색상값 10

유틸리티클래스 (3/3) API 데이터타입 - 구조체 데이터타입정의용도 POINT typedef struct tagpoint { LONG x; LONG y; } POINT, *PPOINT; 점의 x, y 좌표 ( 주로마우스커서의위치를나타낼때사용한다.) RECT typedef struct tagrect { LONG left; LONG top; LONG right; LONG bottom; } RECT, *PRECT; SIZE typedef struct tagsize { LONG cx; LONG cy; } SIZE, *PSIZE; 사각형왼쪽상단과오른쪽하단좌표 사각형폭과높이 11

CString 클래스 (1/3) 특성 가변길이문자열을지원한다. 프로그램실행도중문자열길이를자유롭게바꿀수있다. 최대길이는 (INT_MAX - 1) 이다. const char* 나 LPCTSTR 대신 CString 객체를직접사용할수있다. 이때는 CString 객체에대해 (LPCTSTR) 연산자를명시적으로적용하는것이좋다. CString str = " 안녕하세요."; cout << (LPCTSTR)str << endl; // 실행결과? cout << str << endl; // 실행결과? 12

CString 클래스 (2/3) 객체생성및초기화 CString str1; str1 = " 안녕하세요."; CString str2(" 오늘은 "); CString str3(str2); CString str4 = str1 + " " + str2 + " 즐거운날입니다."; cout << (LPCTSTR)str1 << endl; cout << (LPCTSTR)str2 << endl; cout << (LPCTSTR)str3 << endl; cout << (LPCTSTR)str4 << endl; str4 += " 하하하 "; cout << (LPCTSTR)str4 << endl; 13

CString 클래스 (3/3) CString::Format( ) CString str; str.format("x=%d, y=%d", 100, 200); MessageBox(NULL, (LPCTSTR)str, "CString 연습 ", MB_OK); CString::LoadString( ) CString str; str.loadstring(ids_hello); MessageBox(NULL, (LPCTSTR)str, "CString 연습 ", MB_OK); 14

CPoint, CRect, CSize 클래스 클래스정의 클래스이름 CPoint CRect CSize 정의 class CPoint : public tagpoint class CRect : public tagrect class CSize : public tagsize 업캐스팅 void SomeFunc(RECT* rect) {... } RECT r1; CRect r2; SomeFunc(&r1); // OK! SomeFunc(&r2); // OK! (Upcasting) 15

CPoint 클래스 생성자 CPoint::CPoint (int x, int y); 예 CPoint pt1(10, 20); POINT pt = {30, 40}; CPoint pt2(pt); pt1.offset(40, 30); pt2.offset(20, 10); if(pt1 == pt2) cout << " 두점의좌표가같습니다." << endl; else cout << " 두점의좌표가다릅니다." << endl; 16

CRect 클래스 (1/2) 생성자 CRect::CRect (int l, int t, int r, int b); 사각형의폭과높이 int CRect::Width (); int CRect::Height (); 좌표의포함여부판단 BOOL CRect::PtInRect (POINT point); 17

CRect 클래스 (2/2) 예 CRect rect1; rect1.setrect(0, 0, 200, 100); CRect rect2(0, 0, 200, 100); if(rect1 == rect2) cout << " 두사각형의좌표가같습니다." << endl; else cout << " 두사각형의좌표가다릅니다." << endl; RECT rect = {100, 100, 300, 200}; CRect rect3(rect); cout << rect3.width() << " " << rect3.height() << endl; CPoint pt(200, 150); if(rect3.ptinrect(pt)) cout << " 점이사각형내부에있습니다." << endl; else cout << " 점이사각형외부에있습니다." << endl; 18

CSize 클래스 생성자 CSize::CSize (int x, int y); 예 CSize size1(100, 200); SIZE size = {100, 200}; CSize size2(size); i cout << size2.cx << " " << size2.cy << endl; if(size1 == size2) // 두객체내용이같은지확인한다. cout << " 크기가같습니다." << endl; else cout << " 크기가다릅니다." << endl; 19

CTime, CTimeSpan 클래스 CTime 클래스 절대적인시간 ( 예를들면, 현재시각 ) 을처리한다. CTimeSpan 클래스 시간의차이값을처리한다. 두클래스모두내부적으로시간값을 64비트로저장한다. 20

CTime 클래스 예 // 현재시각구하기 CTime thetime; thetime = CTime::GetCurrentTime(); // 화면에출력하기 CString str = thetime.format( Format("%A %A, %B %d, %Y"); cout << (LPCTSTR)str << endl; str.format(" 현재시각은 %d시 %d분입니다.", thetime.gethour(), thetime.getminute()); cout << (LPCTSTR)str << endl; 21

CTimeSpan 클래스 예 // 시간차구하기 CTime starttime = CTime::GetCurrentTime(); Sleep(2000); CTime endtime = CTime::GetCurrentTime(); CTimeSpan elapsedtime = endtime - starttime; CString str; str.format("%d초가지났습니다.", elapsedtime.gettotalseconds()); cout << (LPCTSTR)str << endl; 22

배열클래스 (1/7) MFC 배열클래스의특징 배열인덱스를잘못참조하는경우오류를발생시킨다. 배열크기가가변적이다. 템플릿클래스 afxtempl.h 헤더파일 클래스이름데이터타입 사용예 CArray 프로그래머가결정 CArray<CPoint, CPoint&> array; 23

배열클래스 (2/7) 비템플릿클래스 afxcoll.h 헤더파일 클래스이름데이터타입사용예 CByteArray BYTE CByteArray array; CWordArray WORD CWordArray array; CDWordArray DWORD CDWordArray array; CUIntArray UINT CUIntArray array; CStringArray CString CStringArray array; CPtrArray void 포인터 CPtrArray array; CObArray CObject 포인터 CObArray array; 24

배열클래스 (3/7) 생성과초기화 CStringArray array; array.setsize(5); for(int i=0; i<5; i++){ CString string; string.format("%d년이지났습니다.", i*10); array[i] = string; } for(i=0; i<5; i++) cout << (LPCTSTR)array[i] << endl; 25

배열클래스 (4/7) 원소삽입과삭제 CUIntArray array; array.setsize(5); for(int i=0; i<5; i++) array[i] = i; // 배열원소삽입 array.insertat(3, 77);\ for(i=0; i<array.getsize(); i++) cout << array[i] << endl; cout << endl; // 배열원소삭제 array.removeat(3); for(i=0; i<array.getsize(); i++) cout << array[i] << endl; 26

배열클래스 (5/7) 템플릿배열클래스 #include "stdafx.h" #include "Console.h" #include <afxtempl.h> CWinApp theapp; using namespace std; struct Point3D { int x, y, z; Point3D() {} Point3D(int x0, int y0, int z0) { x = x0; y = y0; z = z0; } }; 27

배열클래스 (6/7) int _tmain(int argc, TCHAR* argv[ ], TCHAR* envp[ ]) { int nretcode = 0; if (!AfxWinInit(...)) { // 생략... } else { CArray<Point3D, Point3D&> array; array.setsize(5); for(int i=0; i<5; i++) { Point3D pt(i, i*10, i*100); array[i] = pt; } 28

배열클래스 (7/7) } for(i=0; i<5; i++) { Point3D pt = array[i]; cout << pt.x << ", " << pt.y << ", " << pt.z << endl; } } return nretcode; 29

리스트클래스 (1/8) MFC 리스트클래스 Head Tail 템플릿클래스 afxtempl.h 헤더파일 클래스이름데이터타입 사용예 CList 프로그래머가결정 CList<CPoint, CPoint&> list; 30

리스트클래스 (2/8) 비템플릿클래스 afxcoll.h 헤더파일 클래스이름데이터타입 사용예 CObList CObject 포인터 CObList list; CPtrList t void 포인터 CPtrList t list; CStringList CString CStringList list; 31

리스트클래스 (3/8) 생성과초기화 char *szfruits[ ] = { " 사과 ", " 딸기 ", " 포도 ", " 오렌지 ", " 자두 " }; CStringList list; for(int i=0; i<5; i++) list.addtail(szfruits[i]); 32

리스트클래스 (4/8) 순환 // 리스트제일앞에서출발하여순환한다. POSITION pos = list.getheadposition(); while(pos!= NULL){ CString string = list.getnext(pos); cout << (LPCTSTR)string << endl; } cout << endl; // 리스트제일뒤에서출발하여순환한다. pos = list.gettailposition(); while(pos!= NULL){ CString string = list.getprev(pos); cout << (LPCTSTR)string << endl; } 33

리스트클래스 (5/8) 항목삽입과삭제 // POSITION 타입의변수 pos 는이전의예제에서선언한것이다. pos = list.find(" 포도 "); list.insertbefore(pos, " 살구 "); list.insertafter(pos, " 바나나 "); list.removeat (pos); // 항목삽입과삭제후결과를확인한다. pos = list.getheadposition(); while(pos!= NULL){ CString string = list.getnext(pos); cout << (LPCTSTR)string << endl; } 34

리스트클래스 (6/8) 템플릿리스트클래스 #include "stdafx.h" #include "Console.h" #include <afxtempl.h> CWinApp theapp; using namespace std; struct Point3D { int x, y, z; Point3D() {} Point3D(int x0, int y0, int z0) { x = x0; y = y0; z = z0; } }; 35

리스트클래스 (7/8) int _tmain(int argc, TCHAR* argv[ ], TCHAR* envp[ ]) { int nretcode = 0; if (!AfxWinInit(...)) { // 생략... } else { CList<Point3D, Point3D&> list; for(int i=0; i<5; i++) list.addtail(point3d(i, i*10, i*100)); POSITION pos = list.getheadposition(); 36

리스트클래스 (8/8) } while(pos!= NULL) { Point3D pt = list.getnext(pos); cout << pt.x << ", " << pt.y << ", " << pt.z << endl; } } return nretcode; 37

맵클래스 (1/9) 맵동작원리 키 데이터 해시함수 데이터 MFC 맵클래스구현 키 데이터 키데이터키데이터키데이터 키데이터키데이터 38

맵클래스 (2/9) 템플릿클래스 afxtempl.h 헤더파일 클래스이름데이터타입 사용예 CMap 프로그래머가결정 CMap<CString, CString&, CPoint, CPoint&> map; 39

맵클래스 (3/9) 비템플릿클래스 afxcoll.h 헤더파일 클래스이름키 데이터사용예 CMapWordToOb WORD CObject 포인터 CMapWordToOb map; CMapWordToPtr WORD void 포인터 CMapWordToPtr map; CMapPtrToWord void 포인터 WORD CMapPtrToWord map; CMapPtrToPtr void 포인터 void 포인터 CMapPtrToPtr map; CMapStringToOb 문자열 CObject 포인터 CMapStringToOb map; CMapStringToPtr 문자열 void 포인터 CMapStringToPtr map; CMapStringToString 문자열 문자열 CMapStringToString map; 40

맵클래스 (4/9) 생성, 초기화, 검색 CMapStringToString map; map[" 사과 "] = "Apple"; map[" 딸기 "] = "Strawberry"; map[" 포도 "] = "Grape"; " map[" 우유 "] = "Milk"; CString str; if(map.lookup(" 딸기 ", str)) cout << " 딸기 -> " << (LPCTSTR)str << endl; 41

맵클래스 (5/9) 순환 POSITION pos = map.getstartposition(); while(pos!= NULL){ CString strkey, strvalue; map.getnextassoc(pos, strkey, strvalue); cout << (LPCTSTR)strKey << " -> " << (LPCTSTR)strValue << endl; } 42

맵클래스 (6/9) 삽입과삭제 map.removekey( RemoveKey(" 우유 "); map[" 수박 "] = "Watermelon"; // 항목삽입과삭제후결과를확인한다. // POSITION 타입의변수 pos는이전의예제에서선언한것이다. pos = map.getstartposition(); while(pos!= NULL){ CString strkey, strvalue; map.getnextassoc(pos, p strkey, strvalue); cout << (LPCTSTR)strKey << " -> " << (LPCTSTR)strValue << endl; } 43

맵클래스 (7/9) 템플릿맵클래스 #include "stdafx.h" #include "Console.h" #include <afxtempl.h> CWinApp theapp; using namespace std; UINT AFXAPI HashKey(CString& str) { LPCTSTR key = (LPCTSTR) str; UINT nhash = 0; while(*key) nhash = (nhash<<5) + nhash + *key++; return nhash; } 44

맵클래스 (8/9) int _tmain(int argc, TCHAR* argv[ ], TCHAR* envp[ ]) { int nretcode = 0; if (!AfxWinInit(...)) { // 생략... } else { CMap<CString, CString&, UINT, UINT&> map; map[cstring (" 사과 ")] = 10; map[cstring (" 딸기 ")] = 25; map[cstring (" 포도 ")] = 40; map[cstring (" 수박 ")] = 15; 45

맵클래스 (9/9) } UINT ncount; if(map.lookup(cstring(" 수박 "), ncount)) cout << " 수박 " << ncount << " 상자가남아있습니다." << endl; } return nretcode; 46