Download presentation
Presentation is loading. Please wait.
1
(Window Application Programming)
강좌명 : 윈도우 응용프로그래밍 (Window Application Programming) 강좌번호 : E (2017학년 1학기, 컴퓨터공학과) 이수구분 : 전공선택 강의시간 : 월12:00-14:50 강의실 : 7호관 410호 담당교수 : 김권양(컴퓨터공학과) 평가 : 중간고사(30%), 기말고사(30%), 보고서(20%), 출석(20%) 1
2
University of Central Florida
담당교수 Mail : ETRI 경북대학교 한국지능시스템학회 University of Central Florida 경일대학교 한국전자통신연구원 컴퓨터공학과 지능정보미디어 School of Computer Info. 컴퓨터공학과
3
교재 소개 교재 : 명품 C++ Programming 저자 : 황기태 출판사 : 생능출판사 출판년도 : 2013. 7.
참고문헌 C++ ESPRESSO 에스프레소, 천인국, 인피니티북스, Visaul C MFC Programming, 정일홍, 생능출판사, 2013 원도우프로그래밍, 김선우, 한빛아카데미, 2014
4
목차 1장 C++ 시작 1.1 컴퓨터와 프로그래밍 1.2 C++ 언어의 역사 1.3 C++ 언어의 특징 1.4 C++ 프로그램 개발 과정 1.5 C++ 표준 라이브러리 1.6 Visual C++를 이용한 C++ 프로그램 개발 2장 C++ 프로그램의 기본 2.1 C++ 프로그램의 기본 요소와 화면 출력 2.2 namespace와 std:: 2.3 키 입력 받기 2.4 키보드로 문자열 입력 2.5 #include 에 숨은 진실 3장 클래스와 객체 3.1 객체에 대한 이해 3.2 C++ 클래스 만들기 3.3 객체 생성과 객체 활용 3.4 생성자 3.5 소멸자 3.6 접근 지정 3.7 인라인 함수 3.8 C++ 구조체 3.9 바람직한 C++ 프로그램 작성법 4장 객체 포인터와 객체 배열, 객체의 동적 생성 4.1 객체 포인터 4.2 객체 배열 4.3 동적 메모리 할당 및 반환 4.4 객체와 객체 배열의 동적 생성 및 반환 4.5 this 포인터 4.6 string 클래스를 이용한 문자열 사용 5장 함수와 참조, 복사 생성자 5.1 함수의 인자 전달 방식 리뷰 5.2 함수 호출시 객체 전달 5.3 객체 치환 및 객체 리턴 5.4 참조와 함수 5.5 복사 생성자 6장 함수의 다형성과 static 멤버 6.1 함수 중복 6.2 디폴트 매개 변수 6.3 함수 중복의 모호성 6.4 static 멤버
5
목차 10장 템플릿과 표준 템플릿 라이브러리 10.1 일반화와 템플릿 10.2 다양한 제네릭 함수 만들기 10.3 제네릭 클래스 만들기 10.4 C++ 표준 템플릿 라이브러리(STL)와 활용 11장 C++ 입출력 11.1 C++ 입출력 기초 11.2 ostream의 멤버 함수를 이용한 문자 출력 11.3 istream의 멤버 함수를 이용한 문자 입력 11.4 포맷 입출력 11.5 삽입 연산자(<<)와 추출 연산자(>>) 11.6 사용자 조작자 만들기 12장 C++ 파일 입출력 12.1 텍스트 파일과 바이너리 파일 12.2 파일 입출력 개요 12.3 <<와 >> 파일 모드 12.5 멤버 함수를 이용한 텍스트 I/O 12.6 바이너리 I/O 12.7 스트림 상태 검사 12.8 임의 접근 7장 프렌드와 연산자 중복 7.1 C++ 프렌드 개념 7.2 연산자 중복 7.3 이항 연산자 중복 7.4 단항 연산자 중복 7.5 프렌드를 이용한 연산자 중복 7.6 기타 연산자 중복 8장 상속 8.1 상속의 개념 8.2 클래스 상속과 객체 8.3 상속과 객체 포인터 8.4 protected 접근 지정 8.5 상속과 생성자, 소멸자 8.6 상속의 종류 : public, protected,private 상속 8.7 다중 상속 8.8 가상 상속 9장 가상 함수와 추상 클래스 9.1 상속 관계에서의 함수 중복 9.2 가상 함수와 오버라이딩 9.3 가상 함수와 오버라이딩의 활용 사례 9.4 추상 클래스
6
목차 13장 예외 처리와 C 언어와의 링크 지정 실행 오류와 오류 처리 예외와 예외 처리 예외 클래스 만들기 C++ 코드와 C 코드의 링킹 부록 - 심화학습 부록 A. C와 C++ 비교 부록 B. namespace 부록 C. 키 입력 시 흔히 발생하는 문제 부록 D. private이나 protected 생성자 : singleton 사례 부록 E. 한글 문자열과 한글 입출력 부록 F. 연산자 중복 추가 설명 부록 G. STL 고급 활용 부록 H. RTTI - 실행 중에 포인터로 실제 타입 알아내기 부록 I. 파일 입출력 부록 J. ASCII 표
7
명품 C++ 프로그래밍 1장. C++ 시작
8
세상을 먹어 치우는 소프트웨어 소프트웨어 기업의 세상 미국의 대형 서점 보더스 -> 아마존에 대패
블록버스터(Blockbuster) -> 네플릭스(Neflix)에 대패 eBay, Facebook, Groupon, Skype, Twitter, Android, 아이튠스, 판도라, 픽사 등 엄청난 소프트웨어 인력들을 필요로 하는 세상이 왔다.
9
??? TGIF FANG
10
FANG : 페이스북(Facebook)·아마존(Amazon)·넷플릭스(Netflix)·구글(Google)
(시계방향으로) 마크 저커버그 페이스북 창업자. 제프 베조스 아마존 창업자. 리드 헤이스팅스 넷플릭스 창업자. 래리 페이지 구글 공동 창업자. TGiF(트위터·구글·애플 아이폰·페이스북)'
12
프로그래밍과 프로그래밍 언어 프로그래밍 언어 기계어(machine language) 어셈블리어 고급언어
0, 1의 이진수로 구성된 언어 컴퓨터의 CPU는 본질적으로 기계어만 처리 가능 어셈블리어 기계어의 명령을 ADD, SUB, MOVE 등과 같은 상징적인 니모닉 기호 (mnemonic symbol)로 일대일 대응시킨 언어 어셈블러 : 어셈블리어 프로그램을 기계어 코드로 변환 고급언어 사람이 이해하기 쉽고 복잡한 작업, 자료 구조,알고리즘을 표현하기 위해 고안된 언어 Pascal, Basic, C/C++, Java, C# 컴파일러 : 고급 언어로 작성된 프로그램을 기계어 코드로 변환
13
사람과 컴퓨터, 기계어와 고급 언어 35 + 56 = ? 기계어 어셈블리어 C++ LOAD AX 35 LOAD BX 56
LOAD AX 35 LOAD BX 56 ADD AX BX int i; i = ; 기계어 어셈블리어 C++ 어셈블 컴파일
14
프로그래밍 언어의 진화와 C++의 기원 비야네 스트롭스트룹 Ken Tompson Martin Richards
Dennis Ritchie Bjarne Stroustrup Assembly BCPL Fortran Algol Basic C C++ Java C# Javascript Objective-C B 1970 1972 1983 1995 1967 1954 2000 1958 1964 Visual Basic 1991 Perl 1987 PHP 비야네 스트롭스트룹
15
2016년, IT업계 프로그래밍 언어 순위(랭킹 및 점수)
1. codeeval (2016년 2월 기준) "Most Popular Coding Languages"
16
2. IEEE Spectrum (2016년 7월 기준)
17
3. TIOBE Index 검색엔진에 질의한 결과를 가지고 분석한 데이터
18
표준 C++ 프로그램의 중요성 C++ 언어의 표준 표준의 중요성 비 표준 C++ 프로그램
1998년 미국 표준원(ANSI, American National Standards Institute) C++ 언어에 대한 표준 설정 ISO/IEC 문서에 작성됨. 유료 문서 표준의 진화 1998년(C++98), 2003년(C++03), 2007년(C++TR1), 2011년 (C++11) 표준의 중요성 표준에 의해 작성된 C++ 프로그램 모든 플랫폼. 모든 표준 C++ 컴파일러에 의해 컴파일 동일한 실행 결과 보장 운영체제와 컴파일러의 종류에 관계없는 높은 호환성 비 표준 C++ 프로그램 Visual C++, Borland C++ 등 컴파일러 회사 고유의 비 표준 구문 특정 C++ 컴파일러에서만 컴파일 호환성 결여
19
표준/비표준 C++ 프로그램의 비교 "C declarator" #include <iostream>
int main() { std::cout << "Hello“; return 0; } 표준 C++ 규칙에 따라 작성된 C++ 프로그램 볼랜드 C++ 컴파일러 비주얼 C++ GNU C++ 컴퓨터 실행파일 int __cdecl main() { std::cout << "Hello"; 작성되지 않는 비주얼 C++ 프로그램 모든 C++ 컴파일러에 의해 컴파일 비주얼 C++ 전용 키워드 "C declarator"
20
C++ 언어의 주요한 설계 목적 C 언어와의 호환성 객체 지향 개념 도입 엄격한 타입 체크 실행 시간의 효율성 저하 최소화
캡슐화, 상속, 다형성 소프트웨어의 재사용을 통해 생산성 향상 복잡하고 큰 규모의 소프트웨어의 작성, 관리, 유지보수 용이 엄격한 타입 체크 실행 시간 오류의 가능성을 줄임 디버깅 편리 실행 시간의 효율성 저하 최소화 실행 시간을 저하시키는 요소와 해결 작은 크기의 멤버 함수 잦은 호출 가능성 -> 인라인 함수로 실행 시간 저 하 해소
21
C 언어에 추가한 기능 인라인 함수(inline function) 함수 중복(function overloading)
함수 호출 대신 함수 코드의 확장 삽입 함수 중복(function overloading) 매개 변수의 개수나 타입이 다른 동일한 이름의 함수들 선언 디폴트 매개 변수(default parameter) 매개 변수에 디폴트 값이 전달되도록 함수 선언 참조와 참조 변수(reference) 하나의 변수에 별명을 사용하는 참조 변수 도입 참조에 의한 호출(call-by-reference) 함수 호출 시 참조 전달 new/delete 연산자 동적 메모리 할당/해제를 위해 new와 delete 연산자 도입 연산자 재정의(operator overloading) 기존 C++ 연산자에 새로운 연산 정의 제네릭 함수와 클래스 데이터 타입에 의존하지 않고 일반화시킨 함수나 클래스 작성 가능
22
C++ 객체 지향 특성 - 캡슐화 캡슐화(Encapsulation) 클래스와 객체
데이터를 캡슐로 싸서 외부의 접근으로부터 보호 C++에서 클래스(class 키워드)로 캡슐 표현 클래스와 객체 클래스 – 객체를 만드는 틀 객체 – 클래스라는 틀에서 생겨난 실체 객체(object), 실체(instance)는 같은 뜻 객체 생성 클래스 (객체를 정의하는 틀) 객체들 - 실체 class Circle { private: int radius; // 반지름 값 public: Circle(int r) { radius = r; } double getArea() { return 3.14*radius*radius; } }; 멤버들 원을 추상화한 Circle 클래스 원 객체들(실체)
23
C++ 객체 지향 특성 - 상속성 객체 지향 상속(Inheritance) C++ 상속
자식이 부모의 유전자를 물려 받는 것과 유사 C++ 상속 객체가 자식 클래스의 멤버와 부모 클래스에 선언된 모양 그대로 멤버들을 가지고 탄생 스마트폰
24
C++ 객체 지향 특성 - 다형성 다형성(Polymorphism) 多形性
하나의 기능이 경우에 따라 다르게 보이거나 다르게 작동하는 현상 연산자 중복, 함수 중복, 함수 재정의(overriding) > 5 “남자” + “여자” > “남자여자” redColor 객체 + blueColor 객체 --> purpleColor 객체 + 연산자 중복 void add(int a, int b) { ... } void add(int a, int b, int c) { ... } void add(int a, double d) { ... } add 함수 중복 함수 재정의(오버라이딩)
25
C ++ 언어에서 객체 지향을 도입한 목적 소프트웨어 생산성 향상 실세계에 대한 쉬운 모델링
소프트웨어의 생명 주기 단축 문제 해결 필요 기 작성된 코드의 재사용 필요 C++ 클래스 상속 및 객체 재사용으로 해결 실세계에 대한 쉬운 모델링 과거의 소프트웨어 수학 계산이나 통계 처리에 편리한 절차 지향 언어가 적합 현대의 소프트웨어 물체 혹은 객체의 상호 작용에 대한 묘사가 필요 실세계는 객체로 구성된 세계 객체를 중심으로 하는 객체 지향 언어 적합
26
절차 지향 프로그래밍과 객체 지향 프로그래밍 실행하고자 하는 절차대로 일련의 명령어 나열.
흐름도를 설계하고 흐름도에 따라 프로그램 작성 객체들을 정의하고, 객체들의 상호 관계, 상호 작용으로 구현
27
STL(Standard Template Library)
C++와 제네릭 프로그래밍 제네릭 함수와 제네릭 클래스 제네릭 함수(generic function) 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반 화 시킨 함수 제네릭 클래스(generic class) 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반 화 시킨 클래스 template 키워드로 선언 템플릿 함수 혹은 템플릿 클래스라고도 부름 Java, C# 등 다른 언어에도 동일한 개념 있음 제네릭 프로그래밍(generic programming) 제네릭 함수와 제네릭 클래스를 활용하여 프로그램을 작성하는 새로운 프로그래밍 패러다임 점점 중요성이 높아지고 있음 STL(Standard Template Library)
28
C++ 언어의 아킬레스 C++ 언어는 C 언어와의 호환성 추구 장점 단점 기존에 개발된 C 프로그램 코드 활용
캡슐화의 원칙이 무너짐 C++에서 전역 변수와 전역 함수를 사용할 수 밖에 없음 부작용(side effect) 발생 염려
29
C++ 프로그램 개발 과정 Hello ......... C++ 라이브러리 cout << C++ 소스 프로그램 작성
#include <iostream> int main() { std::cout << "Hello"; return 0; } _main,12# $<<01010 _Hello001 컴파일 링킹 실행 오류 발생 목적 파일 (hello.obj) 소스 파일 (hello.cpp) 실행 파일 (hello.exe) 디버깅 오류 수정
30
C++ 프로그램 작성 및 컴파일 편집 컴파일 C++ 소스 프로그램은 텍스트 파일 C++ 소스 프로그램의 표준 확장자는 .cpp
어떠한 텍스트 편집기로도 편집이 가능 C++ 소스 프로그램의 표준 확장자는 .cpp C++ 통합 개발 소프트웨어(IDE) 이용 추천 C++ 소스 편집, 컴파일, 링킹, 실행, 디버깅 등 모든 단계 통합 지원 대표적인 소프트웨어 - Visual Studio C , 11/14/17 컴파일 C++ 소스 프로그램을 기계어를 가진 목적 파일로 변환 cpp 파일을 obj 파일로 변환
31
1 #include <iostream> 2 3 int main() {
_main PROC ; COMDAT ; 3 : int main() { push ebp b ec mov ebp, esp ec c 00 sub esp, ; c0H push ebx 0000a 56 push esi 0000b 57 push edi 0000c 8d bd 40 ff ff ff lea edi, DWORD PTR [ebp-192] 00012 b mov ecx, 48 ; H 00017 b8 cc cc cc cc mov eax, ; ccccccccH 0001c f3 ab rep stosd ; 4 : std::cout << "Hello"; 0001e push OFFSET 00023 a mov eax, DWORD PTR push eax 00029 e call 0002e 83 c add esp, 8 ; 5 : return 0; c0 xor eax, eax ; 6 : } f pop edi e pop esi b pop ebx c4 c 00 add esp, ; c0H 0003c 3b ec cmp ebp, esp 0003e e call __RTC_CheckEsp b e5 mov esp, ebp d pop ebp 00046 c3 ret 0 _main ENDP 어셈블리어 코드 int main(){ 라인을 컴파일한 기계어 코드 1 #include <iostream> 2 3 int main() { 4 std::cout << “Hello”; 5 return 0; 6 }
32
링킹 링킹 목적 파일끼리 합쳐 실행 파일을 만드는 과정
목적 파일은 바로 실행할 수 없음 목적 파일과 C++ 표준 라이브러리의 함수 연결, 실행 파일을 만드 는 과정 hello.obj + cout 객체 + << 연산자 함수 => hello.exe를 만듬 hello.obj 표준 C++ 라이브러리 hello.exe << << 링킹 cout cout
33
프로그램 실행과 디버깅 실행 파일은 독립적으로 바로 실행 가능 실행 중에 발생하는 오류 디버깅
원하는 결과가 나오지 않거나 실행 중에 프로그램의 비정상 종료 디버깅 실행 중에 발생한 오류를 찾는 과정 디버거 디버깅을 도와주는 프로그램 컴파일러를 만드는 회사에서 함께 공급 소스 레벨 디버깅 C++ 소스를 한 라인씩 실행하고 변수 값의 변화를 보면서 오류 발견 Visual Studio는 소스 레벨 디버깅 지원
34
C++ 표준 라이브러리 C++ 표준 라이브러리는 3 개의 그룹으로 구분 C++ 표준 라이브러리 C 라이브러리
콘솔 및 파일 입출력을 위한 라이브러리 C++ STL 라이브러리 제네릭 프로그래밍을 지원하기 위해 템플릿 라이브러리 STL 라이브러리 C 라이브러리 C++ 입출력 라이브러리 C++ 표준 라이브러리
35
Visual Studio 10.0 시작
36
C:\C++\chap1\Hello 폴더가 생긴다.
프로젝트 만들기 프로젝트 이름 C:\C++\chap1 폴더를 생성한다. C:\C++\chap1\Hello 폴더가 생긴다. 솔루션 위치
37
생성된 프로젝트에 대한 확인 창
38
Win32 응용프로그램 마법사 체크해야 함
39
Hello 프로젝트 생성 후
40
새 항목 만드는 메뉴 선택
41
hello.cpp 소스 파일 생성 코드 선택 C++ 소스 파일 이름 입력 hello.cpp가 생기는 폴더
42
hello.cpp 파일이 생성된 초기 모습 빈 hello.cpp 파일 생성
43
hello.cpp 작성 프로그램 작성
44
솔루션 탐색기에서 컴파일 메뉴 선택 hello.cpp 컴파일, 컴파일만 수행
45
Hello 프로젝트의 빌드로 Hello.exe 생성
46
Link 시 오류? Sol.1 : visual studio Service pack 1 설치
<매니페스트포함> No 설정
47
Ctrl+F5(디버깅하지 않고 실행하기 메뉴)로 실행할 때 빌드를 묻는 창
소스가 수정되어 빌드되지 않은 상태에서, 실행을 요청하는 경우에 출력되는 창
48
Hello 프로젝트가 실행되는 화면 Hello 프로젝트 빌드 성공. Hello.exe 생성
49
오류 메시지의 분석 1> hello.cpp
1>c:\documents and settings\kiu\my documents\visual studio 2010\projects\firstprogram\firstprogram\hello.cpp(6): error C2065: ‘sss’ : 선언되지 않은 식별자입니다. 1> 1>빌드하지 못했습니다. 1>경과 시간: 00:00:00.31 ========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========
50
같은 솔루션 내에 다른 프로젝트 생성
51
<프로젝트>-<시작프로젝트로 설정>
52
CD 수록
Similar presentations