명품 C++ 프로그래밍 1장. C++ 시작.

Slides:



Advertisements
Similar presentations
Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
Advertisements

컴퓨터프로그래밍 I 강원대학교 컴퓨터학부 2012 년 1 학기 담당교수 : 정충교 1. 강사진 강사 : 정충교 교수 연구실 : 공 호 조교 : 3 분반 이남세 연구실 : 공
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
명품 C++ 프로그래밍 3장. 클래스와 객체.
Shellcode 작성 김영성.
명품 C++ 8장 상속.
C 언어 기초 2 위덕대학교 에너지전기공학부 이 수 형 2009년 2학기.
C++ Espresso 제1장 기초 사항.
CRT 뽀개기 신영진.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
(Window Application Programming)
강좌명 : C++프로그래밍 (C++ Programming)
Lecture #12 인터럽트 Interrupt.
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제 7 장 링커와 로더 설계.
8. 객체와 클래스 (기본).
누구나 쉽게 즐기는 C언어 콘서트 한남대학교 컴퓨터공학과 이 재 광 교수.
C++ 프로그래밍 2009년 2학기 전자정보공학대학 컴퓨터공학부.
C++ 프로그래밍 2007년 1학기 전자정보공학대학 컴퓨터공학부.
Kasimov C언어 세미나 1st.
C++ Espresso 제9장 다형성.
명품 JAVA Essential.
Lecture #8 어셈블리어 (5) 매크로 어셈블리어 시스템프로그래밍.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
변수와 자료형.
제 1 장 C 언어의 개요 Google 공동 창업자, 래리 페이지와 세르게이 브린.
Visual C++ Programming
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
프로그래밍 서울대학교 통계학과 2009년 2학기 컴퓨터의 개념 및 실습 (
Power Java 제7장 클래스와 객체.
리버스 엔지니어링 안녕하십니까? 리버스 엔지니어링 발표를 맡은 정창하입니다. 지금부터 리버스 엔지니어링 발표를
어셈블리어 및 실습 금 1,2 (314) / 금 3,4 (307) RTDCS 이 종 태
C ++ 프로그래밍 시작.
변수와 자료형.
김 정 석 Web Programming 김 정 석
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
제 1장 시스템 소프트웨어의 개요.
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
제1장 시스템 소프트웨어의 개요 컴퓨터시스템 및 하드웨어 구성 컴퓨터의 구성과 기능 시스템프로그램의 개요
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Buffer Overflow
5장 이름, 바인딩, 영역(2) 순천향대학교 컴퓨터공학과 하상호.
제1장 프로그래밍 기초
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
자바의 신 Volume 1 1부(1~3장) 자바의 신 메인 홈 : 자바의 신 페이스북: 자바의 신 문제 풀이 :
소프트웨어 공학 (Software Engineering)
자전거를 배우려면 안장에 올라가 페달을 밟아라.
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
제 1장 서론 Hello!! C 언어 강성호 김학배 최우영.
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
Copyrightⓒ ohta. All Rights Reserved.
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
Chapter 02. 소프트웨어와 자료구조.
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
3장,4장 발표 서정우.
10장 템플릿과 표준 템플릿 라이브러리(STL)
C언어 개요 프로그래밍이란 프로그래밍 언어란 컴퓨터와의 의사소통을 위한 표현 방법 세대별 언어의 발전을 거듭함
컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.
강의교안 이용 안내 *이 책에 딸린 강의자료는 교수님의 효율적인 수업진행을 돕기 위해 만들어졌습니다.
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
C++ 언어의 특징
Assembly 05 방호남 07 반지훈 09 박상욱.
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
제 1 강 컴퓨터의 구조.
Presentation transcript:

명품 C++ 프로그래밍 1장. C++ 시작

세상을 먹어 치우는 소프트웨어 소프트웨어 기업의 세상 미국의 대형 서점 보더스 -> 아마존에 대패 블록버스터(Blockbuster) -> 네플릭스(Neflix)에 대패 eBay, Facebook, Groupon, Skype, Twitter, Android, 아이튠스, 판도라, 픽사 등 엄청난 소프트웨어 인력들을 필요로 하는 세상이 왔다.

프로그래밍과 프로그래밍 언어 프로그래밍 언어 기계어(machine language) 어셈블리어 고급언어 0, 1의 이진수로 구성된 언어 컴퓨터의 CPU는 본질적으로 기계어만 처리 가능 어셈블리어 기계어의 명령을 ADD, SUB, MOVE 등과 같은 상징적인 니모닉 기호 (mnemonic symbol)로 일대일 대응시킨 언어 어셈블러 : 어셈블리어 프로그램을 기계어 코드로 변환 고급언어 사람이 이해하기 쉽고 복잡한 작업, 자료 구조,알고리즘을 표현하기 위해 고안된 언어 Pascal, Basic, C/C++, Java, C# 컴파일러 : 고급 언어로 작성된 프로그램을 기계어 코드로 변환

사람과 컴퓨터, 기계어와 고급 언어 35 + 56 = ? 기계어 어셈블리어 C++ 01010000 00101001 11101011 LOAD AX 35 LOAD BX 56 ADD AX BX int i; i = 35 + 56; 기계어 어셈블리어 C++ 어셈블 컴파일

프로그래밍 언어의 진화와 C++의 기원 Ken Tompson Martin Richards Ken Tompson과 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

표준 C++ 프로그램의 중요성 C++ 언어의 표준 표준의 중요성 비 표준 C++ 프로그램 1998년 미국 표준원(ANSI, American National Standards Institute) C++ 언어에 대한 표준 설정 ISO/IEC 14882 문서에 작성됨. 유료 문서 표준의 진화 1998년(C++98), 2003년(C++03), 2007년(C++TR1), 2011년 (C++11) 표준의 중요성 표준에 의해 작성된 C++ 프로그램 모든 플랫폼. 모든 표준 C++ 컴파일러에 의해 컴파일 동일한 실행 결과 보장 운영체제와 컴파일러의 종류에 관계없는 높은 호환성 비 표준 C++ 프로그램 Visual C++, Borland C++ 등 컴파일러 회사 고유의 비 표준 구문 특정 C++ 컴파일러에서만 컴파일 호환성 결여

표준/비표준 C++ 프로그램의 비교 #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++ 언어의 주요한 설계 목적 C 언어와의 호환성 객체 지향 개념 도입 엄격한 타입 체크 실행 시간의 효율성 저하 최소화 캡슐화, 상속, 다형성 소프트웨어의 재사용을 통해 생산성 향상 복잡하고 큰 규모의 소프트웨어의 작성, 관리, 유지보수 용이 엄격한 타입 체크 실행 시간 오류의 가능성을 줄임 디버깅 편리 실행 시간의 효율성 저하 최소화 실행 시간을 저하시키는 요소와 해결 작은 크기의 멤버 함수 잦은 호출 가능성 -> 인라인 함수로 실행 시간 저 하 해소

C 언어에 추가한 기능 인라인 함수(inline function) 함수 중복(function overloading) 함수 호출 대신 함수 코드의 확장 삽입 함수 중복(function overloading) 매개 변수의 개수나 타입이 다른 동일한 이름의 함수들 선언 디폴트 매개 변수(default parameter) 매개 변수에 디폴트 값이 전달되도록 함수 선언 참조와 참조 변수(reference) 하나의 변수에 별명을 사용하는 참조 변수 도입 참조에 의한 호출(call-by-reference) 함수 호출 시 참조 전달 new/delete 연산자 동적 메모리 할당/해제를 위해 new와 delete 연산자 도입 연산자 재정의 기존 C++ 연산자에 새로운 연산 정의 제네릭 함수와 클래스 데이터 타입에 의존하지 않고 일반화시킨 함수나 클래스 작성 가능

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 클래스 원 객체들(실체)

C++ 객체 지향 특성 - 상속성 객체 지향 상속(Inheritance) C++ 상속 자식이 부모의 유전자를 물려 받는 것과 유사 C++ 상속 객체가 자식 클래스의 멤버와 부모 클래스에 선언된 모양 그대로 멤버들을 가지고 탄생

C++ 객체 지향 특성 - 다형성 다형성(Polymorphism) 하나의 기능이 경우에 따라 다르게 보이거나 다르게 작동하는 현상 연산자 중복, 함수 중복, 함수 재정의(overriding) 2 + 3 --> 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 함수 중복 함수 재정의(오버라이딩)

C ++ 언어에서 객체 지향을 도입한 목적 소프트웨어 생산성 향상 실세계에 대한 쉬운 모델링 소프트웨어의 생명 주기 단축 문제 해결 필요 기 작성된 코드의 재사용 필요 C++ 클래스 상속 및 객체 재사용으로 해결 실세계에 대한 쉬운 모델링 과거의 소프트웨어 수학 계산이나 통계 처리에 편리한 절차 지향 언어가 적합 현대의 소프트웨어 물체 혹은 객체의 상호 작용에 대한 묘사가 필요 실세계는 객체로 구성된 세계 객체를 중심으로 하는 객체 지향 언어 적합

절차 지향 프로그래밍과 객체 지향 프로그래밍 실행하고자 하는 절차대로 일련의 명령어 나열. 흐름도를 설계하고 흐름도에 따라 프로그램 작성 객체들을 정의하고, 객체들의 상호 관계, 상호 작용으로 구현

C++와 제네릭 프로그래밍 제네릭 함수와 제네릭 클래스 제네릭 프로그래밍(generic programming) 제네릭 함수(generic function) 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반 화 시킨 함수 제네릭 클래스(generic class) 동일한 프로그램 코드에 다양한 데이터 타입을 적용할 수 있게 일반 화 시킨 클래스 template 키워드로 선언 템플릿 함수 혹은 템플릿 클래스라고도 부름 Java, C# 등 다른 언어에도 동일한 개념 있음 제네릭 프로그래밍(generic programming) 제네릭 함수와 제네릭 클래스를 활용하여 프로그램을 작성하는 새로운 프로그래밍 패러다임 점점 중요성이 높아지고 있음

C++ 언어의 아킬레스 C++ 언어는 C 언어와의 호환성 추구 장점 단점 기존에 개발된 C 프로그램 코드 활용 캡슐화의 원칙이 무너짐 C++에서 전역 변수와 전역 함수를 사용할 수 밖에 없음 부작용(side effect) 발생 염려

C++ 프로그램 개발 과정 Hello ......... C++ 라이브러리 cout << C++ 소스 프로그램 작성 010100000100010101001111010110101010010111010101 #include <iostream> int main() { std::cout << "Hello"; return 0; } _main,12# $<<01010 00000111 _Hello001 컴파일 링킹 실행 오류 발생 목적 파일 (hello.obj) 소스 파일 (hello.cpp) 실행 파일 (hello.exe) 디버깅 오류 수정

C++ 프로그램 작성 및 컴파일 편집 컴파일 C++ 소스 프로그램은 텍스트 파일 C++ 소스 프로그램의 표준 확장자는 .cpp 아무 텍스트 편집기로 편집 가능 C++ 소스 프로그램의 표준 확장자는 .cpp C++ 통합 개발 소프트웨어 이용 추천 C++ 소스 편집, 컴파일, 링킹, 실행, 디버깅 등 모든 단계 통합 지원 대표적인 소프트웨어 - Visual Studio C++ 10.0 컴파일 C++ 소스 프로그램을 기계어를 가진 목적 파일로 변환 cpp 파일을 obj 파일로 변환

1 #include <iostream> 2 3 int main() { _main PROC ; COMDAT ; 3 : int main() { 00000 55 push ebp 00001 8b ec mov ebp, esp 00003 81 ec c0 00 00 00 sub esp, 192 ; 000000c0H 00009 53 push ebx 0000a 56 push esi 0000b 57 push edi 0000c 8d bd 40 ff ff ff lea edi, DWORD PTR [ebp-192] 00012 b9 30 00 00 00 mov ecx, 48 ; 00000030H 00017 b8 cc cc cc cc mov eax, -858993460 ; ccccccccH 0001c f3 ab rep stosd ; 4 : std::cout << "Hello"; 0001e 68 00 00 00 00 push OFFSET ??_C@_05COLMCDPH@Hello?$AA@ 00023 a1 00 00 00 00 mov eax, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$ 00028 50 push eax 00029 e8 00 00 00 00 call ??$?6U?$char_traits@D@std@@YAAAV?$basic_ostream@DU?$ 0002e 83 c4 08 add esp, 8 ; 5 : return 0; 00031 33 c0 xor eax, eax ; 6 : } 00033 5f pop edi 00034 5e pop esi 00035 5b pop ebx 00036 81 c4 c0 00 00 00 add esp, 192 ; 000000c0H 0003c 3b ec cmp ebp, esp 0003e e8 00 00 00 00 call __RTC_CheckEsp 00043 8b e5 mov esp, ebp 00045 5d 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 }

링킹 링킹 목적 파일끼리 합쳐 실행 파일을 만드는 과정 목적 파일은 바로 실행할 수 없음 목적 파일과 C++ 표준 라이브러리의 함수 연결, 실행 파일을 만드 는 과정 hello.obj + cout 객체 + << 연산자 함수 => hello.exe를 만듬 hello.obj 표준 C++ 라이브러리 hello.exe << << 링킹 cout cout

프로그램 실행과 디버깅 실행 파일은 독립적으로 바로 실행 가능 실행 중에 발생하는 오류 디버깅 원하는 결과가 나오지 않거나 실행 중에 프로그램의 비정상 종료 디버깅 실행 중에 발생한 오류를 찾는 과정 디버거 디버깅을 도와주는 프로그램 컴파일러를 만드는 회사에서 함께 공급 소스 레벨 디버깅 C++ 소스를 한 라인씩 실행하고 변수 값의 변화를 보면서 오류 발견 Visual Studio는 소스 레벨 디버깅 지원

C++ 표준 라이브러리 C++ 표준 라이브러리는 3 개의 그룹으로 구분 C 라이브러리 C++ 입출력 라이브러리 콘솔 및 파일 입출력을 위한 라이브러리 C++ STL 라이브러리 제네릭 프로그래밍을 지원하기 위해 템플릿 라이브러리 STL 라이브러리 C 라이브러리 C++ 입출력 라이브러리

Visual Studio 10.0 시작

프로젝트 만들기 프로젝트 이름 C:\C++\chap1\Hello 폴더가 생긴다. 솔루션 위치 C:\C++\chap1 폴더를 생성한다. C:\C++\chap1\Hello 폴더가 생긴다. 솔루션 위치

생성된 프로젝트에 대한 확인 창

Win32 응용프로그램 마법사 체크해야 함

Hello 프로젝트 생성 후

새 항목 만드는 메뉴 선택

hello.cpp 소스 파일 생성 코드 선택 C++ 소스 파일 이름 입력 hello.cpp가 생기는 폴더

hello.cpp 파일이 생성된 초기 모습 빈 hello.cpp 파일 생성

hello.cpp 작성 프로그램 작성

솔루션 탐색기에서 컴파일 메뉴 선택 hello.cpp 컴파일, 컴파일만 수행

Hello 프로젝트의 빌드로 Hello.exe 생성

Ctrl+F5(디버깅하지 않고 실행하기 메뉴)로 실행할 때 빌드를 묻는 창 소스가 수정되어 빌드되지 않은 상태에서, 실행을 요청하는 경우에 출력되는 창

Hello 프로젝트가 실행되는 화면 Hello 프로젝트 빌드 성공. Hello.exe 생성