제 1 강 희망의 땅, 알고리즘

Similar documents
chap10.PDF

PowerPoint 프레젠테이션

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

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

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

1

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

01-OOPConcepts(2).PDF

K&R2 Reference Manual 번역본

Microsoft PowerPoint - additional08.ppt [호환 모드]

Microsoft PowerPoint - ch07 - 포인터 pm0415

C++ 기본문법 정리

C++ 기본문법 정리

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

C# Programming Guide - Types

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

C++ Programming

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

C++ Programming

프입2-강의노트-C++배경

자바 프로그래밍

C++ Programming

PowerPoint Template

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

초보자를 위한 C# 21일 완성

17장 클래스와 메소드

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

<4D F736F F F696E74202D2031C1D6C2F72D31C2F7BDC32028B0ADC0C7C0DAB7E D20C7C1B7CEB1D7B7A1B9D6BEF0BEEE20B0FAB8F1BCD2B


PowerPoint Presentation

Microsoft PowerPoint - a10.ppt [호환 모드]

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - 02-Class Review.pptx

Slide 1

제 1 장 기본 개념

chap x: G입력

PowerPoint Template

설계란 무엇인가?

Microsoft PowerPoint - Chapter 1-rev

PowerPoint Template

Design Issues

PowerPoint 프레젠테이션

gnu-lee-oop-kor-lec06-3-chap7

Blog

OOP 소개

2002년 2학기 자료구조

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

11장 포인터

Microsoft PowerPoint - C++ 5 .pptx

JAVA PROGRAMMING 실습 08.다형성

PowerPoint Presentation

PowerPoint Template

설계란 무엇인가?

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

슬라이드 1

05-class.key

11장 포인터

C프로-3장c03逞풚

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

강의10

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

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

PowerPoint Presentation

Microsoft Word - java19-1-midterm-answer.doc

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft Word - FunctionCall

C++ Programming

11강-힙정렬.ppt

PowerPoint Presentation

초보자를 위한 C++

Microsoft PowerPoint - chap06-2pointer.ppt

JAVA PROGRAMMING 실습 02. 표준 입출력

슬라이드 1

chap 5: Trees

1

PowerPoint Presentation

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - additional03.ppt [호환 모드]

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft Word - ExecutionStack

OCW_C언어 기초

02 C h a p t e r Java

03장.스택.key

Chapter 4. LISTS

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

유니티 변수-함수.key

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

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

슬라이드 1

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - additional07.ppt [호환 모드]

JVM 메모리구조

13주-14주proc.PDF

Transcription:

제 2 강 C++ 언어개요 이재규 leejaku@shinbiro.com

Topics C++ 언어의역사와개요 프로그래밍언어의패러다임변화 C 의확장언어로서의 C++ 살펴보기 포인터와레퍼런스 새로운메모리할당 Function Overloading, Template 객체지향언어로서의 C++ 살펴보기 OOP 의개념과실습

2.1 C++ 의역사와개요 프로그래밍언어의역사 C++ 언어의구조

프로그래밍언어의역사 1 mov ax,351ch 프로그래밍언어 컴퓨터를위한상세작업명세서 기계중심 -> 사람중심으로의변화 기계어 (Machine Language) 궁극적으로 CPU 가이해하는유일한언어 Operator + Operand Assembly Language 숫자를이해하기쉬운 Symbol 로대치 마크로등의부가기능 기본적으로기계어와동일한구조 int 21h mov word ptr OldInt1c,bx mov ax,es mov word ptr OldInt1c+2,ax

프로그래밍언어의역사 2 BASIC Beginner's All-purpose Symbolic Instruction Code 행번호기반의고급언어 제한된제어구조 (GOTO) 로스파게티코드단점 FORTRAN/COBOL 과학기술용 / 업무용고급언어 오래된시스템에서현재도많이사용하고있음 Code Abstraction : 코드뭉치를하나의 Symbol 로대체. Function or Subroutine Function Name, Argument, Body, Return Value

프로그래밍언어의역사 3 Pascal Structured Programming 순서, 선택, 반복구조로코딩 Type Abstraction + 하나의논리구조를가지는데이타들의집합 Type Name, Member Data C Low Level 프로그래밍가능한단순한구조 최소한의형식규약만갖춤 가장많이사용된다목적프로그래밍언어

프로그래밍언어의역사 4 C++ Bjarne Stroustroup 이창안 (AT&T) 1985 http://www.research.att.com/~bs/ C 언어와무엇이다른가? C 언어와의하위호환성제공 C 언어의스펙상단점을보완 reference, inline function, 변수중간선언 function overload, 새로운메모리할당 template C 언어에객체지향특성을가미 코드와데이타를통합한 class 제공 encapsulation, inheritance, polymorphism

C++ 언어의구성 Data Type Primitive data type : char, int, float, double... Derived data type : array, pointer, reference User Defined Data type : structure, union, class Operator ( 연산자 ) 산술, 할당, 비트, 논리, 관계, 선택, 멤버, 조건 구분자 : [] () {} 등 operator overloading Flow Control int sum(int a, int b) { int result = a + b; return result; } if else, switch, while, do while, for, goto, continue, break Function function name, argument, return value, body default argument, function overloading, inline function

C++ 프로그램생성 CPP 파일 CPP 파일 CPP 파일 헤더파일 전처리기 전개된 CPP CPP파일 C++ 컴파일러 OBJ 파일 OBJ 파일 OBJ 파일링커결과물

2.2 C++ : C 의확장 Pointer vs Reference 새로운메모리할당 Function overloading Default Parameter Template 기타

Pointer Pointer : 메모리의주소를가리키는변수 32 비트환경에서는 4 바이트의크기를가짐 Pointer 규정요소 주소 (Address) 와타입 (Type) 주소만있는포인터 : void pointer Pointer 연산 * (dereference operator), & (address of operator) Pointer + integer, Pointer integer Pointer Pointer Pointer 특징 Low-Level 프로그래밍가능하게한다. 하지만잘못사용하면매우위험한코드가됨

Pointer (Pictures) int nvalue = 10; int* pvalue = &nvalue; int nvalue2 = *pvalue; 100 104 108 112 116 10 nvalue 104 pvalue int arrayvalues[4] = { 10, 20, 30, 40 }; int* pvalue = arrayvalues; int nvalue; nvalue = *pvalue; // = arrayvalues[0] pvalue = pvalue + 2; // pvalue++; pvalue++; nvalue = *pvalue; // = arrayvalues[2] 100 104 108 112 116 10 20 30 40 100 arrayvalues pvalue int nindex = pvalue arrayvalues; // = 2

Reference Reference = Alias & 쉬운포인터 생성과동시에초기화되어야함 Pointer 사용할때많이실수하는점극복 Address of 연산자빼먹기 초기화되지않은포인터사용하기 int nvalue = 10; int& rvalue = nvalue; rvalue = 11; // then nvalue = 11 nvalue = 12; // then rvalue = 12 printf( %x, %x\n, &nvalue, &rvalue); // same address

Pointer vs Reference void SwapPtr(int* x, int* y) { int temp = *x; *x = *y; *y = temp; } void SwapRef(int& x, int& y) { int temp = x; x = y; y = temp; } int first = 0, second = 1; SwapPtr(&first, &second); // & 빼먹으면 crash!!! SwapPtr(first, second);

새로운메모리할당 Type-safe memory allocation : new & delete class(struct) 의 constructor 와 destructor 를호출함 // C 방식 struct Person; Person* panyone; panyone = (Person*)malloc(sizeof(Person)); if (panyone == 0) exit(0); // use panyone... free(panyone); // C++ 방식 struct Person; Person* panyone; panyone = new Person; if (panyone == 0) exit(0); // use panyone... delete panyone;

Function Overloading 같은이름의여러함수를정의할수있음 구분방법 : 인자의타입과갯수 int multiply(int a, int b) { return a * b; } double multiply(double a, double b) { return a * b; } int nresult; double dresult; nresult = multiply(10, 20); dresult = multiply(3.5, 2.1); dresult = multiply(3.5, 2.1, 1.5); dresult = multiply(10, 2.5); // 10 은 double 로 // type promotion double multiply(double a, double b, double c) { return a * b * c; }

Default Parameter 함수의인자를생략할수있음 생략할수있는인자는오른쪽끝부터차곡차곡 // prototype of function int multiply(int a, int b = 1, int c = 1, int d = 1); int multiply(int a, int b, int c, int d) { return a * b * c * d; } int nresult; nresult = multiply(5); // multiply(5,1,1,1); nresult = multiply(5, 6); // multiply(5,6,1,1); nresult = multiply(5, 6, 7); // multiply(5,6,7,1);

Template Template 이란? 파라미터화된타입으로함수나클래스를정의 Function Template, Class Template 타입에관계없는일반적 (generic) 인코드제작 template <class T> void SwapGeneric(T& a, T& b) { T temp = a; a = b; b = temp; } int i = 10, j = 20; SwapGeneric(i, j); double di = 1.5, dj = 2.5; SwapGeneric(1.5, 2.5);

기타확장들 Inline function Macro function 에 type-safe 가능하게 블럭의중간에변수정의가가능함 새로운표준입출력방식 스트림모델 : cout, cin Operator overloading 연산자의의미를재정의할수있음 Exception Handling 에러처리를간명하게

2.3 C++ : 객체지향언어 class 정의 OO : 캡슐화 OO : 계승 OO : 다형성

Class Class 의정의 class = member variables + member function 객체의상태 (state) 와행위 (method) 를결합 class는 type, object는 class의 instance class Point { private: int m_nx; int m_ny; public: void setxy(int x, int y) { m_nx = x; m_ny = y; } int getx() { return m_nx; } int gety() { return m_ny; } void WhoAreYou() { printf( Point\n ); } }; Point pt; pt.setxy(10, 5); int x = pt.getx(); int y = pt.gety();

Object Oriented Programming OOP 의세가지특징 캡슐화 (Encapsulation) 상태와행위를가지는객체로모델링 정보숨기기 (Information Hiding) : 상태의임의변경금지 계승 (Inheritance) 선조클래스로부터 Implementation을취사선택 Base Class vs Derived Class 다형성 (Polymorphism) 서로다른타입의객체를동일한방법으로사용하게함 virtual function

OOP : Encapsulation Access Specifier ( 접근지정 ) Private: 클래스외부에서접근금지 Public: 어디서나접근가능 Protected: 클래스내부와 Derived class 에서만접근 무엇을숨길것인가? 멤버데이타 / 내부함수는 private or protected 외부사용가능함수는 public ( 안전한함수만 ) 의의 데이타타입과행동 (Method) 의명시적관계 잘못된클래스사용을사전방지

OOP : Inheritance Inheritance 기존의 Implementation 을 그대로사용할수도있고, 재정의할수도있음 소프트웨어생산성을높임 single inheritance, multiple inheritance class Rectangle : public Point { private: int m_nx2; int m_ny2; public: void setx2y2(int x, int y) { m_nx2 = x; m_ny2 = y; } int getx2() { return m_nx2; } int gety2() { return m_ny2; } void WhoAreYou() { printf( Rectangle\n ); } };

OOP : Polymorphism Polymorphism 서로다른타입을한가지방법으로사용하게함 virtual function, virtual function table,late binding Derived class pointer는 Base class pointer로변환가능 class Point { private: int m_nx; int m_ny; public: void setxy(int x, int y) { m_nx = x; m_ny = y; } int getx() { return m_nx; } int gety() { return m_ny; } virtual void WhoAreYou() { printf( Point\n ); } }; Point Object vfptr m_nx m_ny WhoAreYou others... ohters...

2 강결론

결론 C++ 언어는 C 언어의장점을취하고 C언어를확장하고 객체지향특성을가미한언어이다. 객체지향의세가지특성은 Encapsulation Inheritance Polymorphism