프로그래밍 (Object Oriented...

Preview:

Citation preview

객체

객체

객체

객체

지향

지향

지향

지향

프로

그래

밍프

로그

래밍

프로

그래

밍프

로그

래밍

(Obje

ct O

riente

d P

rogra

mm

ing)

(Obje

ct O

riente

d P

rogra

mm

ing)

(Obje

ct O

riente

d P

rogra

mm

ing)

(Obje

ct O

riente

d P

rogra

mm

ing)

14장

강사–

강대

차례

차례

차례

차례

(Agenda)

(Agenda)

(Agenda)

(Agenda)

�has-a 관

계�

객체

멤버

를가

지는

클래

스(컨

테인

먼트

)�

vala

rray

템플

릿클

래스

�priva

te 상

속과

pro

tecte

d 상

속�

다중

상속

�가

상기

초클

래스

�클

래스

템플

릿만

들기

�클

래스

템플

릿사

용하

기�

템플

릿특

수화

코드

의코

드의

코드

의코

드의

재활

용성

재활

용성

재활

용성

재활

용성

�상

속(inherita

nce)

대합

성(c

om

positio

n)

�상

속–

인터

페이

스상

속(inte

rface inherita

nce)

�is

-a 관

계�

C++ 에

서는

public

상속

–구

현상

속(im

ple

menta

tion inherita

nce)

또는

클래

스상

속�

has-a 관

계�

C++ 에

서는

priva

te 상

속,

pro

tecte

d 상

�합

성–

컴포

지션

(com

positio

n),

컨테

인먼

트(c

onta

inm

ent)

, 레

이어

링(laye

ring)

–has-a 관

�has-a 관

계는

컨테

인먼

트또

는priva

te 상

Stu

dent cla

ss

Stu

dent cla

ss

Stu

dent cla

ss

Stu

dent cla

ss 의 의의의

예 예예예

�이

름–

(1)

문자

배열

, (2

) 포

인터

와동

적메

모리

할당

, (3

) strin

g 클

래스

�성

적–

(1)

고정

크기

배열

, (2

) 동

적메

모리

할당

, (3

) va

larray

클래

�va

larr

ay

클래

스(8

91쪽

) �

클래

스템

플릿

–va

larray<

int>

q_v

alu

es; //

크기

0

–va

larray<

int>

v2(8

); /

/ 크

기8

–va

larray<

int>

v3(1

0,8

); /

/ 크

기8, 초

기값

10

–va

larray<

double

> v

4(g

pa,4

); /

/ 크

기4, 초

기값

gpa

원소

–opera

tor[

](),

siz

e()

, sum

(), m

ax(

), m

in()

컨테

인먼

트컨

테인

먼트

컨테

인먼

트컨

테인

먼트

: Stu

dent

: Stu

dent

: Stu

dent

: Stu

dent 클

래스

클래

스클

래스

클래

스설

계설

계설

계설

계(8

92

(892

(892

(892쪽 쪽쪽쪽

) )))

cla

ss S

tudent {

priva

te:

strin

g n

am

e;

vala

rray<double

> s

core

s;

} �구

현을

획득

하지

만,

인터

페이

스는

상속

하지

않음

! (중

요) �

구현

획득

컨테

인먼

트컨

테인

먼트

컨테

인먼

트컨

테인

먼트

: Stu

dent

: Stu

dent

: Stu

dent

: Stu

dent 클

래스

클래

스클

래스

클래

스예

제예

제예

제예

제(8

94

(894

(894

(894쪽 쪽쪽쪽

) )))

�ty

pedef

–클

래스

정의

의priva

te 부

�exp

licit 키

워드

(688쪽

)

�제

한을

가하

는도

구들

은적

극적

으로

활용

(896쪽

)

�멤

버초

기자

리스

트–

객체

멤버

는상

속의

경우

기초

클래

스와

마찬

가지

로미

리생

성되

어초

기화

되어

야함

–따

라서

, 사

용하

지않

을경

우다

른멤

버객

체들

은디

폴트

생성

자로

생성

–초

기화

순서

에조

심한

�클

래스

내부

에선

내포

된객

체의

메써

드를

사용

할수

있음

�필

요하

면헬

퍼메

쏘드

를사

용(8

98쪽

)

priva

te

priva

te

priva

te

priva

te 상

속상

속상

속상

속(9

03

(903

(903

(903쪽 쪽쪽쪽

) )))

�priva

te 상

속은

디폴

트상

속방

법임

�public

상속–

인터

페이

스상

�priva

te 상

속–

구현

상속

�컨

테인

먼트–

종속

객체

(subobje

ct)

의구

현획

priva

te

priva

te

priva

te

priva

te 상

속상

속상

속상

속: Stu

dent

: Stu

dent

: Stu

dent

: Stu

dent 클

래스

클래

스클

래스

클래

�다

중상

속(9

04쪽

)�

priva

te 멤

버데

이터

를가

질필

요가

없음–

상속

되는

두기

초클

래스

가필

요한

데이

터멤

버들

을제

공�

기초

클래

스성

분의

초기

화–

멤버

이름

이아

닌클

래스

이름

을사

용(9

05쪽

)

�기

초클

래스

메쏘

드에

접근

–클

래스

이름

과클

래스

사용

범위

연산

자사

용(9

07쪽

)1.

Arr

ayD

B::

sum

()2.

std

::va

larr

ay<

double

>::sum

()

�기

초클

래스

객체

에접

근(9

07쪽

) –

위의

3,4

,5�

기초

클래

스프

렌드

에접

근(9

08쪽

) –

위의

3,4

,5�

priva

te 상

속에

서는

파생

클래

스에

서기

초클

래스

로의

명시

적데

이터

형변

환만

가능

함(암

시적

데이

터형

변환

은안

됨)

–public

상속

이라

도명

시적

데이

터형

변환

필요

(909쪽

참고

)

컨테

인먼

트와

컨테

인먼

트와

컨테

인먼

트와

컨테

인먼

트와

priva

te

priva

te

priva

te

priva

te 상

속상

속상

속상

속비

교비

교비

교비

�Favo

r obje

ct com

positio

n o

ver cla

ss inherita

nce!

-G

oF

1.

컨테

인먼

트가

더사

용하

기쉽

다2.

다중

상속

은다

이아

몬드

구조

가되

는경

우문

제를

일으

킬소

지가

큼1.

두개

이상

의기

초클

래스

들이

같은

조상

을공

유할

경우

, 파

생클

래스

가그

조상

의다

중인

스턴

스를

가짐

2.

두개

이상

의기

초클

래스

들이

같은

이름

을가

진메

쏘드

들을

공유

3.

같은

클래

스종

속객

체들

을여

러개

내포

할수

있음

�priva

te 상

속의

(허접

한)

장점

(컨테

인먼

트에

대한

)1.

pro

tecte

d 멤

버를

사용

할수

있음

2.

가상

멤버

함수

를다

시정

의할

수있

�pro

tecte

d 상

속–

priva

te 상

속의

변종

–915쪽

의<표

14.1

>

usin

gusin

gusin

gusin

g을 을을을

사용

하여

사용

하여

사용

하여

사용

하여

접근

을접

근을

접근

을접

근을

다시

다시

다시

다시

정의

정의

정의

정의

�priva

te/p

rote

cte

d 상

속을

하고

나서

, 기

초클

래스

들의

특정

메쏘

드들

을public

으로

하려

면?

1.

public

파생

클래

스메

쏘드

를새

로정

2.

usin

g 선

언사

용(9

16쪽

)

3.

구식

방법

: public

으로

다시

선언

–원

래의

의도

를퇴

색시

다중

다중

다중

다중

상속

상속

상속

상속

�문

제점

1.

서로

다른

두기

초클

래스

들에

서이

름은

같지

만서

로다

른메

쏘드

를상

속하

는문

제2.

같은

조상

클래

스를

가지

는서

로다

른두

기초

클래

스들

에게

서다

중인

스턴

스를

상속

받는

문제

�다

중상

속을

반대

하는

사람

들이

더많

음�

다중

상속

이들

어맞

는경

우–

템플

릿–

Polic

y-based p

rogra

mm

ing

�Ja

va –

클래

스의

다중

상속

안됨

–Ja

va에

서는

어떻

게다

중상

속을

흉내

낼수

있는

가? (

시험

문제

)

�클

래스

구조

-W

ork

er(

조부

모),

Waiter(

부모

), S

inger(

부모

), S

ingin

gW

aiter(

자식

)

조부

모조

부모

조부

모조

부모

클래

스의

클래

스의

클래

스의

클래

스의

다중

다중

다중

다중

인스

턴스

인스

턴스

인스

턴스

인스

턴스

(923

(923

(923

(923쪽 쪽쪽쪽

) )))

�두

개의

Work

er

성분–

924쪽

의표

14.4

�모

호성–

(923쪽

)

Sin

gin

gW

aiter

ed;

Work

er*

pw

= &

ed;

–강

제데

이터

형변

환으

로해

결�

다형

성을

해침

�해

결책

은가

상기

초클

래스

cla

ss S

inger

: vi

rtual public

Work

er

{};

cla

ss W

aiter

: vi

rtual public

Work

er

{};

가상

가상

가상

가상

기초

기초

기초

기초

클래

스클

래스

클래

스클

래스

(924

(924

(924

(924쪽 쪽쪽쪽

) )))

�하

나의

공통

조상

을공

유하

는여

러개

의기

초클

래스

로부

터공

통조

상의

유일

객체

를상

속받

는방

�조

상객

체는

하나

만가

–그

림14.4

(924쪽

) 및

그림

14.5

(925쪽

) 참

�이

시점

에서

의문

점들

1.

왜가

상이

냐?

2.

처음

부터

디폴

트로

가상

이면

안되

냐?

3.

가상

기초

클래

스를

쓰려

면뭘

해야

하나

?

가상

가상

가상

가상

기초

기초

기초

기초

클래

스클

래스

클래

스클

래스

의문

점의

문점

의문

점의

문점

해결

해결

해결

해결

! !!!

�왜

가상

이라

고하

냐?

–별

의미

없음

.

–새

로운

키워

드를

추가

하기

힘들

–일

종의

키워

드오

버로

딩!

�왜

가상

기초

클래

스가

디폴

트가

아닌

가?

–여

러벌

의복

사본

을원

하는

경우

가있

–가

상기

초가

디폴

트이

려면

추가

작업

이필

요함

–모

호성

�조

상클

래스

의생

성자

를명

시적

으로

호출

해야

�메

쏘드

사용

의모

호성

이존

재함

가상

가상

가상

가상

기초

기초

기초

기초

클래

스클

래스

클래

스클

래스

의문

점의

문점

의문

점의

문점

해결

해결

해결

해결

! !!!

�가

상기

초클

래스

를쓰

려면

뭐를

해야

하나

?

–vi

rtual 키

워드

추가

–기

존코

드들

의변

가상

가상

가상

가상

기초

기초

기초

기초

클래

스의

클래

스의

클래

스의

클래

스의

생성

자생

성자

생성

자생

성자

규칙

규칙

규칙

규칙

Sin

gin

gW

aiter

(const W

ork

er

& w

k,�

) :

Waiter(

wk,

p),

Sin

ger(

wk,

v) {

}

�정

보의

전달

이두

개의

다른

경로

를거

친다

!

�가

상이

아닌

경우

, 각

각의

카피

로가

지만

, 가

상이

라면

문제

가됨

�해

결책

: 명

시적

으로

조상

생성

자도

호출

Sin

gin

gW

aiter

(const W

ork

er

& w

k,�

) :

Work

er(

wk)

, W

aiter(

wk,

p),

Sin

ger(

wk,

v) {

}

메쏘

드메

쏘드

메쏘

드메

쏘드

사용

의사

용의

사용

의사

용의

모호

성모

호성

모호

성모

호성

(928

(928

(928

(928쪽 쪽쪽쪽

) )))

�Sin

gin

gW

aiter

new

hire(�

);

�new

hire.S

how

();

// 모

호함

�new

hire.S

inger:

:Show

();

// 해

�점

층적

접근

방식

은문

제가

됨(9

29쪽

)–�

priva

te 헬

퍼메

쏘드

를통

한모

듈접

근방

식을

사용

(930쪽

)

가상

가상

가상

가상

기초

기초

기초

기초

클래

스와

클래

스와

클래

스와

클래

스와

가상

이가

상이

가상

이가

상이

아닌

아닌

아닌

아닌

기초

기초

기초

기초

클래

클래

클래

클래

스의

스의

스의

스의

혼합

혼합

혼합

혼합

�다

음과

같은

경우

–클

래스

M은

C,D

에대

해서

는클

래스

B의

종속

객체

하나

만내

–클

래스

M은

X,Y

에대

해각

각별

개의

클래

스B

의종

속객

체들

을내

�모

든가

상경

로에

대해

서는

하나

의클

래스

객체

, 그

렇지

않으

면별

개의

기초

클래

스종

속객

체들

을내

포함

가상

가상

가상

가상

기초

기초

기초

기초

클래

스의

클래

스의

클래

스의

클래

스의

비교

비교

비교

비교

우위

우위

우위

우위

(dom

inance)

(dom

inance)

(dom

inance)

(dom

inance)

( (((참고

참고

참고

참고

: 842

: 842

: 842

: 842쪽 쪽쪽쪽

오버

로딩

오버

로딩

오버

로딩

오버

로딩

대 대대대오

버라

이딩

오버

라이

딩오

버라

이딩

오버

라이

딩) )))

�가

상이

아닌

클래

스의

경우

모호

함�

가상

클래

스인

경우

모호

할수

도있

고,

비교

우위

에의

해모

호하

지않

을수

도있

�파

생클

래스

의이

름은

조상

클래

스보

다비

교우

위를

가짐

가상

가상

가상

가상

기초

기초

기초

기초

클래

스의

클래

스의

클래

스의

클래

스의

비교

비교

비교

비교

우위

우위

우위

우위

(dom

inance)

(dom

inance)

(dom

inance)

(dom

inance)

�클

래스

C가

B에

서파

생되

었으

므로

, 클

래스

C의

q()

정의

가클

래스

B의

q()

정의

보다

비교

우위

를가

짐�

F의

메쏘

드들

은C

::q()

를q()

라고

할수

있음

�C

와E는

서로

상대

에대

해기

초클

래스

가아

니므

로,

om

b()

정의

들은

서로

비교

우위

를가

지지

않음

�F에

서om

b()

를하

면모

호해

�가

상모

호성

은접

근규

칙은

고려

하지

않음

�E

의om

b()

가priva

te 이

라고

해도

여전

히om

b()

의사

용은

모호

클래

스클

래스

클래

스클

래스

템플

릿템

플릿

템플

릿템

플릿

(942

(942

(942

(942쪽 쪽쪽쪽

) )))

�예

를들

면데

이터

형과

무관

한형

식으

로스

택을

정의

할수

있는

가?

�ty

pedef?

–943쪽

–ty

pedef

unsig

ned long Ite

m;

–단

점1 –

데이

터변

경할

때마

다헤

더파

일수

–단

점2 –

프로

그램

당,

한종

류의

스택

만생

�C

++의

해결

책–

클래

스템

플릿

일단

일단

일단

일단

함수

함수

함수

함수

템플

릿템

플릿

템플

릿템

플릿

복습

복습

복습

복습

(466

(466

(466

(466쪽 쪽쪽쪽

) )))

�템

플릿

은함

수가

아니

며무

조건

인라

인함

수가

되는

것도

아님

�Sw

ap 함

수의

템플

릿예

tem

pla

te <

typenam

eT>

void

Sw

ap (

T &

a,

T &

b)

{

T tem

p =

a;

a =

b;

b =

tem

p;

} �위

의선

언을

했다

고해

도아

직함

수가

생긴

게아

함수

함수

함수

함수

템플

릿템

플릿

템플

릿템

플릿

복습

복습

복습

복습

계속

계속

계속

계속

�특

수화

(specia

lization)

–템

플릿

은추

상이

다. 따

라서

코드

로실

행하

려면

특수

한예

를이

끌어

내야

한다

.

�암

시적

구체

화, 명

시적

구체

화,

명시

적특

수화

–구

체화

또는

인스

턴스

화(insta

ntiation)

또는

암시

적특

수화

�템

플릿

은함

수가

아니

다.

템플

릿으

로부

터함

수를

만들

어내

야한

다.

�암

시적

구체

화–

마치

있었

던거

처럼

자연

스럽

게요

구함

�명

시적

구체

화–

대놓

고요

청함

. 라

이브

러리

만들

때좋

–명

시적

특수

화(e

xplic

it s

pecia

lization)

�템

플릿

에서

지정

한방

법과

는다

른특

수한

예외

를만

들고

싶다

함수

함수

함수

함수

템플

릿템

플릿

템플

릿템

플릿

복습

복습

복습

복습

계속

계속

계속

계속

�암

시적

구체

화(im

plic

it insta

ntiation)

–코

드를

만들

라는

명시

적인

선언

이나

실행

이없

다. 다

만이

미만

들었

겠거

니하

고내

부적

으로

돌아

갈뿐

(468쪽

과471

쪽코

드)

–469쪽

의Sw

ap(i,j)

는Sw

ap<in

t>(i,j)

와동

일함

�명

시적

구체

화(e

xplic

it insta

ntiation)

–프

로그

램내

부에

서선

언해

서구

체적

인코

드를

만들

라고

명한

다. (4

79쪽

)–

예: te

mpla

te v

oid

Sw

ap<in

t>(int&

, in

t&

);

�명

시적

특수

화(e

xplic

it s

pecia

lization)

–템

플리

트의

특수

한경

우를

만들

고자

한다

(475쪽

코드

)–

예: te

mpla

te <

> v

oid

Sw

ap<in

t>(int&

, in

t&

);–

예: te

mpla

te <

> v

oid

Sw

ap(int&

, in

t&);

함수

함수

함수

함수

템플

릿템

플릿

템플

릿템

플릿

복습

복습

복습

복습

계속

계속

계속

계속

�템

플릿

도오

버로

딩된

다(4

71쪽

)

�따

라서

함수

이름

이하

나주

어지

면(4

74쪽

)–

템플

릿이

아닌

그냥

함수

, 템

플릿

함수

(실은

암시

적특

수화

함수

), 명

시적

특수

화함

–그

리고

이것

들의

오버

로딩

버전

들이

존재

할수

있음

�가

장적

합한

버전

을찾

는것

을–

오버

로딩

분석

(ove

rloadin

g r

esolu

tion)이

라고

–일

반적

으로

가장

특수

화된

경우

를찾

클래

스클

래스

클래

스클

래스

템플

릿템

플릿

템플

릿템

플릿

�예

를들

면데

이터

형과

무관

한형

식으

로스

택을

정의

할수

있는

가?

�템

플릿–

매개

변수

화되

는데

이터

형제

�예

: Q

ueue에

int를

전달

하여

int의

Queue 생

성,

vala

rray

템플

릿클

래스

�클

래스

템플

릿정

의(9

45쪽

)–

tem

pla

te <

typenam

eT> 로

시작

–데

이터

형�

T

–te

mpla

te <

typenam

eT> b

oolSta

ck<

T>::push(c

onstT&

item

)

�템

플릿

선언

과함

수를

분리

시키

고싶

다면

, exp

ort

포인

터들

의포

인터

들의

포인

터들

의포

인터

들의

스택

스택

스택

스택

템플

릿템

플릿

템플

릿템

플릿

�Sta

ck<

char

*> s

t를

적용

하는

경우

, 잘

못된

응용

(951쪽

)–

strin

g p

o; �

char*

po;

�포

인터

만있

지저

장공

간없

음�

실행

시간

에러

–strin

g p

o; �

char

po[4

0];

�pop 메

쏘드

와안

맞음

�배

열이

름에

대입

안되

므로

컴파

일에

–strin

g p

o; �

char*

po

= n

ew

char[

40];

�po

주소

는바

뀌지

않고

스택

에들

어감

�로

직에

�올

바른

사용

�호

출한

프로

그램

이포

인터

들의

배열

을제

공하

는것

포인

터들

의포

인터

들의

포인

터들

의포

인터

들의

스택

스택

스택

스택

템플

릿템

플릿

템플

릿템

플릿

�원

래스

택–

945쪽

�바

뀐스

택(9

53쪽

)–

동적

메모

리할

당으

로포

인터

들의

배열

을할

당함

�제

대로

된사

용예–

956쪽

배열

배열

배열

배열

템플

릿템

플릿

템플

릿템

플릿

예제

와예

제와

예제

와예

제와

데이

터데

이터

데이

터데

이터

형이

형이

형이

형이

아닌

아닌

아닌

아닌

전달

전달

전달

전달

인자

인자

인자

인자

�컨

테이

너클

래스–

객체

들을

담기

위한

클래

스–

템플

릿은

다양

한데

이터

형이

매개

변수

로사

용된

다는

점에

서컨

테이

너클

래스

와잘

맞아

떨어

–컨

테이

너클

래스

들을

위해

재활

용하

기위

한코

드를

만들

자는

게템

플릿

을도

입한

동기

�배

열템

플릿

예제–

958쪽

–te

mpla

te <

cla

ss T

, in

tn>

–T는

데이

터형

, n은

숫자

(수식

전달

인자

)

–Arr

ayT

P<double

, 12> e

ggw

eig

hts

;

�수

식전

달인

자double

형은

허용

안됨

수식

수식

수식

수식

전달

전달

전달

전달

인자

인자

인자

인자

�정

수형

, 열

거형

, 참

조, 포

인터

허용

됨–

double

& rm

, double

* pm

�double

형은

허용

안됨

–double

m; //

안됨

�템

플릿

코드

는수

식전

달인

자값

을변

경하

거나

그주

소를

얻을

수는

없음

–n++, &

n 등

은허

용안

–템

플릿

을구

체화

할때

, 수

식전

달인

자의

값은

상수

이어

야함

�생

성자

접근

방식–

힙메

모리

�수

식전

달인

자–

스택–

크기

가작

은배

열이

면더

빠름

수식

수식

수식

수식

전달

전달

전달

전달

인자

인자

인자

인자

�가

장큰

단점

–각

배열

크기

가자

신만

의템

플릿

을각

각생

–Arr

ayT

P<double

, 12> e

ggw

eig

hts

;

–Arr

ayT

P<double

, 13> d

onuts

;

–Sta

ck<

int>

eggs(1

2);

–Sta

ck<

int>

dunke

rs(1

3);

�생

성자

접근

방식

은배

열크

기를

클래

스멤

버로

저장

하므

로더

융통

성이

있음

템플

릿의

템플

릿의

템플

릿의

템플

릿의

융통

성과

융통

성과

융통

성과

융통

성과

재귀

적재

귀적

재귀

적재

귀적

사용

사용

사용

사용

�템

플릿

은–

기초

클래

스가

될수

도있

–성

분클

래스

가될

수도

있고

–다

른템

플릿

의데

이터

형매

개변

수가

될수

도있

�배

열템

플릿

으로

배열

원소

들이

하나

의스

택템

플릿

을이

루는

스택

템플

릿을

만들

고, 다

시배

열템

플릿

으로

스택

템플

릿의

배열

생성

(961쪽

)–

Array

< S

tack<

int>

> a

si; /

/ > >

로>>와

구별

�템

플릿

의재

귀적

사용–

962 쪽

–ArrayT

P< A

rrayT

P<in

t, 5

> , 1

0 >

tw

odee;

–in

ttw

odee[1

0][

5];

와동

하나

하나

하나

하나

이상

의이

상의

이상

의이

상의

데이

터데

이터

데이

터데

이터

형 형형형매

개매

개매

개매

개변

수변

수변

수변

수, , , , 그

리고

그리

고그

리고

그리

고디

폴트

디폴

트디

폴트

디폴

트데

이터

데이

터데

이터

데이

터형 형형형

매개

매개

매개

매개

변수

변수

변수

변수

�하

나이

상의

데이

터형

매개

변수–

962 쪽

–Pair<strin

g,

int>

�디

폴트

데이

터형

매개

변수

–te

mpla

te<cla

ss T

1,

cla

ss T

2=in

t> c

lass T

opo�

–Topo<double

, double

> m

1;

–Topo<double

> m

2;

// T

opo<double

, in

t> m

2;

–클

래스

템플

릿데

이터

형매

개변

수–

디폴

트값

가능

–함

수템

플릿

데이

터형

매개

변수–

디폴

트값

불가

–데

이터

형아

닌매

개변

수–

디폴

트값

가능

템플

릿템

플릿

템플

릿템

플릿

특수

화특

수화

특수

화특

수화

�암

시적

구체

–사

용하

기를

원하

는데

이터

형을

나타

내는

객체

를선

언(예

: ArrayT

P<in

t,100> s

tuff

;)

–객

체가

요구

될때

까지

암시

적구

체화

를미

룸�

ArrayT

P<double

, 30> *

pt; /

/ 아

직아

�pt = n

ew

ArrayT

P<double

, 30>; //

암시

적구

체화

!

�명

시적

구체

화–

클래

스선

언�

tem

pla

te c

lass A

rrayT

P<strin

g, 100>;

�명

시적

특수

화–

다음

슬라

이드

명시

적명

시적

명시

적명

시적

특수

화특

수화

특수

화특

수화

�템

플릿

이특

정형

에맞

게구

체화

될때

, 조

금다

르게

행동

하도

록수

정–

tem

pla

te<cla

ss T

> c

lass S

ortedArr

ay

{ �

}

–T::

opera

tor>

() 메

소드

는T가

char*

인경

우다

르게

동작

함–

tem

pla

te<> c

lass S

ortedArr

ay<

char*

> {�

}

�부

분적

인특

수화

–템

플릿

의포

괄성

을일

부제

한하

는것

을말

–예�

데이

터형

매개

변수

중어

느하

나에

구체

적데

이터

형제

�포

인터

들을

위한

특별

한버

전제

부분

적인

부분

적인

부분

적인

부분

적인

특수

화특

수화

특수

화특

수화

�데

이터

형매

개변

수중

어느

하나

에구

체적

데이

터형

제공

–포

괄적

인경

우�

tem

pla

te<cla

ss T

1,

cla

ss T

2> c

lass P

air {�

};

–부

분적

인특

수화

�te

mpla

te<cla

ss T

1> c

lass P

air<T1, in

t> {�

};

–명

시적

특수

화�

tem

pla

te<> c

lass P

air<in

t, int>

{�

};

�사

용예

–Pair <

double

, double

> p

1; //

포괄

적인

경우

–Pair <

double

, in

t> p

2; //

부분

적인

특수

–Pair <

int, int>

p3; //

명시

적특

수화

부분

적인

부분

적인

부분

적인

부분

적인

특수

화특

수화

특수

화특

수화

�포

인터

들을

위한

특별

한버

전제

–포

괄적

인버

전�

tem

pla

te<cla

ss T

> c

lass F

eeb

{�

};

–부

분적

인특

수화

�te

mpla

te<cla

ss T

*> c

lass F

eeb

{�

};

�사

용예

–Feeb<char>

fb1;

// 포

괄적

버전

, T는

char

–Feeb<char

*> f

b2;

// 부

분적

특수

화,

T는

char

부분

적인

부분

적인

부분

적인

부분

적인

특수

화특

수화

특수

화특

수화

�다

양한

제한

허용

–포

괄적

인버

�te

mpla

te<cla

ss T

1,c

lass T

2,

cla

ss T

3> c

lass T

rio {�

};

–T3를

T2로

설정

하는

특수

�te

mpla

te<cla

ss T

1,c

lass T

2> c

lass T

rio<T1,T

2,T

2> {�

};

–T3와

T2를

T1*로

설정

하는

특수

�te

mpla

te<cla

ss T

1> c

lass T

rio<T1,T

1*,

T1*> {�

};

�사

용예

–Trio<in

t, s

hort,

char *>

t1; //

포괄

적버

–Trio<in

t, s

hort> t2; //

Trio<T1,T

2,T

2>

–Trio<char,

char*

,char*

> t3; //

Trio<T1,T

1*,

T1*>

멤버

멤버

멤버

멤버

템플

릿템

플릿

템플

릿템

플릿

�템

플릿

은구

조체

, 클

래스

, 템

플릿

클래

스의

멤버

가될

수있

음–

STL에

서요

구됨

�970쪽

예제

–내

포된

템플

릿클

래스

멤버

매개

변수

매개

변수

매개

변수

매개

변수

템플

릿템

플릿

템플

릿템

플릿

�템

플릿

의매

개변

수는

–데

이터

형매

개변

수, 데

이터

형이

아닌

매개

변수

, 그

리고

템플

릿매

개변

수를

가질

수있

�974쪽

예제

–te

mpla

te <

tem

pla

te<ty

penam

eT> c

lass T

hin

g> c

lass C

rab

{�};

–C

rab<Kin

g> legs; 를

선언

하면

�Thin

g<in

t>가

Kin

g<in

t>로

�Thin

g<double

>이

Kin

g<double

>로

바뀜

–C

rab<Sta

ck>

nebula

; 를

선언

하면

�Thin

g<in

t>가

Sta

ck<

int>

�Thin

g<double

>이

Sta

ck<

double

>로

바뀜

매개

변수

매개

변수

매개

변수

매개

변수

템플

릿템

플릿

템플

릿템

플릿

�일

반매

개변

수와

혼합

가능

�사

용예

–te

mpla

te <

tem

pla

te<ty

penam

eT> c

lass T

hin

g,

typenam

eU

, ty

penam

eV> c

lass C

rab {�

};

–C

rab<Sta

ck,

int, d

ouble

> n

ebula

;

템플

릿템

플릿

템플

릿템

플릿

클래

스와

클래

스와

클래

스와

클래

스와

프렌

드프

렌드

프렌

드프

렌드

함수

함수

함수

함수

�템

플릿

의프

렌드

는세

가지

가있

–템

플릿

이아

닌프

렌드

–바

운드

템플

릿프

렌드–

클래

스가

구체

화될

때,

클래

스의

데이

터형

에의

해프

렌드

의데

이터

형이

결정

–언

바운

드템

플릿

프렌

드–

프렌

드의

모든

특수

가그

클래

스의

각특

수화

에대

해프

렌드

들임

템플

릿이

템플

릿이

템플

릿이

템플

릿이

아닌

아닌

아닌

아닌

프렌

드프

렌드

프렌

드프

렌드

함수

함수

함수

함수

tem

pla

te <

cla

ss T

>

cla

ss H

asFriend

{

frie

nd v

oid

counts

();

// 모

든H

asFriend

구체

화에

대한

프렌

드함

} void

counts

() {�

}

�counts

()는

HasFriend<in

t> 클

래스

에대

해서

도프

렌드

이고

, H

asFriend<double

> 클

래스

에대

해서

도프

렌드

바운

드바

운드

바운

드바

운드

템플

릿템

플릿

템플

릿템

플릿

프렌

드프

렌드

프렌

드프

렌드

함수

함수

함수

함수

tem

pla

te <

cla

ss T

>

cla

ss H

asFriend

{ frie

nd v

oid

report(H

asFriend<T> &

); /

/ 바

운드

템플

릿프

렌드

함수

} void

report(H

asFriend<in

t> &

hf)

{�

}

void

report(H

asFriend<double

> &

hf)

{�

}

�위

의두

report는

HasFriend의

각각

의특

수화

에대

한프

렌드

로,

사용

되는

모든

특수

화에

대해

정의

해주

어야

템플

릿템

플릿

템플

릿템

플릿

클래

스의

클래

스의

클래

스의

클래

스의

특수

화에

특수

화에

특수

화에

특수

화에

따라

따라

따라

따라

자동

으로

자동

으로

자동

으로

자동

으로

프렌

드프

렌드

프렌

드프

렌드

함수

가함

수가

함수

가함

수가

나오

게나

오게

나오

게나

오게

하는

하는

하는

하는

법 법법법

�프

렌드

함수

들을

함수

템플

릿으

로만

들어

바운

드템

플릿

프렌

드로

설정

하면

클래

스템

플릿

과일

체화

가됨

(981 쪽

)

1.

클래

스정

의앞

에템

플릿

함수

선언

�te

mpla

te <

typenam

eT> v

oid

counts

();

�te

mpla

te <

typenam

eT> v

oid

report(T

&);

2.

템플

릿안

에서

함수

템플

릿들

을프

렌드

로선

언�

frie

nd v

oid

counts

<TT>()

;

�fr

iend v

oid

report<>(H

asFriendT<TT> &

);�

or

frie

nd v

oid

report< H

asFriendT<TT> >

(HasFriendT<TT> &

);

3.

그프

렌드

선언

에대

한함

수템

플릿

정의

제공

4.

사용

예�

counts

<in

t>()

; counts

(double

)();

�re

port(h

fi2);

//

또는

report< H

asFriendT<in

t> >

(hfi2);

언바

운드

언바

운드

언바

운드

언바

운드

템플

릿템

플릿

템플

릿템

플릿

프렌

드프

렌드

프렌

드프

렌드

함수

함수

함수

함수

�프

렌드

템플

릿데

이터

형매

개변

수들

이템

플릿

클래

스데

이터

형매

개변

수들

과다

름(9

84쪽

)te

mpla

te <

typenam

eT>

cla

ss M

anyF

riend

{te

mpla

te <

typenam

eC

, ty

penam

eD

> f

riend v

oid

show

2(C

&,

D&

);} �

사용

예–

show

2(h

fi1, hfi2);

�show

2<M

anyF

riend<in

t>,

ManyF

riend<in

t> >

(hfi1,h

fi2);

–show

2(h

fdb, hfi2);

�show

2<M

anyF

riend<double

>,

ManyF

riend<in

t>> (

hfd

b,

hfi2);

Recommended