프로그래밍 (object oriented...
TRANSCRIPT
객체
객체
객체
객체
지향
지향
지향
지향
프로
그래
밍프
로그
래밍
프로
그래
밍프
로그
래밍
(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);