C++ Espresso 제12장 템플릿.

Slides:



Advertisements
Similar presentations
7 장 프렌드와 연산자 중복 1 명품 C++. 친구란 ? 2 우리 집 냉장고 내 침대 우리 집 TV 우리 집 식탁 친구 친구 ? 내 가족의 일원은 아니지만 내 가족과 동일한 권한을 가진 일원으로 인정받은 사람.
Advertisements

4장 배열과 함수 한빛미디어(주).
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
C++ Espresso 제1장 기초 사항.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
제14장 동적 메모리.
최윤정 Java 프로그래밍 클래스 상속 최윤정
컴퓨터 프로그래밍 기초 [Final] 기말고사
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
8. 객체와 클래스 (기본).
제9장 추상 데이터 타입 및 모듈 (Abstract Data Type & Module)
Internet Computing KUT Youn-Hee Han
7장 배열 ②.
7 스택.
스택(stack) SANGJI University Kwangman Ko
Lesson 5. 레퍼런스 데이터형.
Lesson 9. 예외처리.
명품 C++ 7장 프렌드와 연산자 중복.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
Power Java 제14장 배치 관리자.
스택(Stack) 김진수
프로그래밍 랩 – 7주 리스트.
14. 예외처리.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
11장. 1차원 배열.
Introduction To Data Structures Using C
13. 연산자 오버로딩.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
Method & library.
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
가상함수와 추상 클래스.
19. 함수 포인터와 void 포인터.
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
C언어 응용 제7주 실습 해보기 제6장.
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
C++ Espresso 제11장 예외 처리와 형변환.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
CHAP 21. 전화, SMS, 주소록.
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
제 6 장 함수(functions).
Chapter 13. 템플릿(Template) 1
Chapter 2 C++ 함수와 네임스페이스. 최호성.
Flow Diagram IV While.
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
구조체(struct)와 공용체(union)
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
Power Java 제14장 배치 관리자.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
6 객체.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

C++ Espresso 제12장 템플릿

일반적인 하나의 코드로 다양한 자료형을 처리하는 기법을 살펴봅시다. 이번 장에서 학습할 내용 일반적인 하나의 코드로 다양한 자료형을 처리하는 기법을 살펴봅시다. 함수 템플릿 클래스 템플릿 스택 예제

템플릿이란? 템플릿(template): 물건을 만들 때 사용되는 틀이나 모형을 의미 함수 템플릿(function template): 함수를 찍어내기 위한 형틀

만약 float 값중에서 최대값을 구하는 함수가 필요하다면? 함수 get_max() int get_max(int x, int y) { if( x > y ) return x; else return y; } 만약 float 값중에서 최대값을 구하는 함수가 필요하다면? 1. 하나더 만든다. 2.

핵심적인 내용은 같고 매개 변수의 타입만 달라진다. 함수 get_max() float get_max(float x, float y) { if( x > y ) return x; else return y; } 핵심적인 내용은 같고 매개 변수의 타입만 달라진다.

일반화 프로그래밍 일반화 프로그래밍(generic programming): 일반적인 코드를 작성하고 이 코드를 정수나 문자열과 같은 다양한 타입의 객체에 대하여 재사용하는 프로그래밍 기법

get_max() template<typename T> T get_max(T x, T y) { if( x > y ) return x; else return y; } 자료형이 변수처럼 표기되어 있음을 알 수 있다

템플릿 함수의 사용

예제

실행 결과

템플릿 함수의 특수화 template <typename T> // 함수 템플릿으로 정의 void print_array(T[] a, int n) { for(int i=0;i<n; i++) cout << a[i] << " "; cout << endl; } template <> // 템플릿 특수화 void print_array(char[] a, int n) // 매개 변수가 char인 경우에는 이 함수가 호출된다. cout << a << endl;

함수 템플릿과 함수 중복 중복

함수 템플릿과 함수 중복

두개의 타입 매개 변수

중간 점검 문제 1. 변수의 절대값을 구하는 int abs(int x)를 템플릿 함수로 정의하여 보자. 2. 두수의 합을 계산하는 int add(int a, int b)를 템플릿 함수로 구현하여 보자. 3. displayArray()라는 함수는 배열을 매개 변수로 받아서 반복 루프를 사용하여서 배열의 원소를 화면에 출력한다. 어떤 타입의 배열도 처리할 수 있도록 함수 템플릿으로 정의하여 보라.

클래스 템플릿 클래스 템플릿(class template): 클래스를 찍어내는 틀(template) 예제: 하나의 값을 저장하고 있는 박스 template <typename 타입이름, ...> class 클래스이름 { ... }

예제

실행 결과 클래스 템플릿으로 만들어 보자.

클래스 템플릿 버전

클래스 템플릿 정의 template <typename T> class 클래스이름 { }

예제

클래스 외부에 정의

두개의 타입 매개 변수 두 개의 데이터를 저장하는 클래스 Box2

예제

예제

중간 점검 문제 1. 클래스 템플릿 형태로 라이브러리를 제공하면 어떤 장점이 있는가? 2. 세개의 데이터를 가지고 있는 Triple라는 클래스를 클래스 템플릿으로 작성하여 보라.

예제: 스택 스택(stack): 후입 선출(LIFO:Last-In First-Out) 자료 구조

스택의 연산들 ▪ is_empty(s) ::= 스택이 비어있는지를 검사한다. ▪ is_full(s) ::= 스택이 가득 찼는가를 검사한다. ▪ push(s, e) ::= 스택의 맨 위에 요소 e를 추가한다. ▪ pop(s) ::= 스택의 맨 위에 있는 요소를 삭제한다.

스택의 공백 상태와 포화 상태

isEmpty() , isFull() isEmpty() if top = -1 then return TRUE else return FALSE isFull() if top = (MAX_STACK_SIZE-1) then return TRUE else return FALSE

push() push(x) if isFull() then error "overflow" else top←top+1 stack[top]←x

pop() pop(x) if isEmpty() then error "underflow" else e←stack[top] top←top-1 return e

스택의 구현 #include <iostream> using namespace std; // 예외 처리를 위한 클래스 class FullStack {} ; class EmptyStack {};

스택의 구현 template <class T> class Stack { private: T* s; int size; int top; public: Stack(int n = 100) : size(n), top(-1) { s = new T[size]; } ~Stack() { delete []s; } void push(T v); T pop(); bool isEmpty() const { return top == -1;} bool isFull() const { return top == size - 1;} };

스택의 구현 template< typename T > void Stack< T >::push( T v ) { if ( isFull() ) throw FullStack(); s[ ++top ] = v; } T Stack< T >::pop( ) if ( isEmpty() ) throw EmptyStack(); return s[ top-- ];

스택의 구현 400 300 200 100 계속하려면 아무 키나 누르십시오 . . . int main() { Stack<int> s; // 크기가 100인 정수형 스택 s.push(100); s.push(200); s.push(300); s.push(400); cout << s.pop() << endl; return 0; } 400 300 200 100 계속하려면 아무 키나 누르십시오 . . .

스택의 응용

실행 결과

Q & A