목차
Part 1. 이론
들어가기전에 ... 3
정수의 크기 ... 3
이진수, 16진수 및 2의보수 ... 4
스택(stack) 동작 ... 5
표현식(expression) ... 5
특별한 연산자 [], () ... 6
C++의 메모리 할당 연산자 new 와 delete ... 7
함수 포인터(pointer to a function) ... 14
심벌 테이블(symbol table) ... 16
실습문제 ... 17
1장 C++의 구조체 ... 19
좀 더 자연스러운 구조체 ... 27
실습문제 ... 36
2장 선언 변경자 ... 37
변경자의 종류 ... 47
한정자(qualifier) : const와 volatile ... 49
변덕장이 mutable ... 53
explicit ... 54
호출관례(calling conventions) ... 56
선언의 예 ... 60
실습문제 ... 61
3장 함수이름 오버로딩(function name overloading) ... 63
함수 오버로딩이 필요한가? ... 66
모호함(ambiguity) ... 69
제한점 ... 70
다른범위(scope)에서의 오버로드 ... 70
적절한 아규먼트를 가지는 함수찾기 ... 72
멤버 함수의 오버로드 ... 73
DWORD에 FLOAT를 라운드오프(round-off) 에러 없이 전달하기 ... 75
실습문제 ... 76
4장 기정의 파라미터(default argumnet) ... 79
향상된 기교 ... 81
기정의 파라미터의 표현식(expression) ... 85
다른 고려사항 ... 86
디폴트 생성자에 사용된 디폴트 파라미터 ... 86
실습문제 ... 88
5장 참조(reference)와 별명(alias) ... 89
별명(alias) ... 90
별명이 번역되는 원리 ... 93
참조에 의한 호출(call by reference) ... 94
기우(imagined fears) ... 96
참조의 초기화 ... 97
참조를 리턴하는 함수 ... 98
진보된 주제 ... 99
실습문제 ... 100
6장 new와 delete : 진보된 주제 ... 101
함수 포인터 배열(array of pointers to functions)의 할당 ... 102
new/delete의 오버로딩(overloading) ... 105
명시적 호출(explicit call) ... 109
new/delete의 오버로딩 : 배열형식 ... 110
동적 2차원 배열(1) : 특별한 포인터 ... 111
동적 2차원 배열(2) : 포인터의 포인터 ... 114
동적 2차원 배열(3) : 연산자 오버로딩 ... 117
실습문제 ... 120
7장 함수형 초기화 ... 121
생성자(constructor) ... 122
레퍼런스와 상수의 초기화 ... 124
베이스 클래스의 생성자 호출과 멤버 객체의 초기화 ... 128
멤버 객체의 초기화 ... 129
외워야 할 표(table) ... 130
함수형 형 변환(functional casting) ... 132
실습문제 ... 133
8장 클래스 계층도(class hierarchy)를 그리는 법 ... 135
UML 도구 ... 139
실습문제 ... 140
9장 C++ 객체 모델(object model) 그리고 오토마타 ... 141
클래스, 객체 그리고 인스턴스(class, object and instance) ... 142
IS-A 관계(is-a relationship) ... 146
상속(inheritance) ... 147
인스턴스(instance)와 객체 : 또 다른 나 ... 149
불완전한 예 ... 152
오버라이딩(overriding) ... 154
접근 권한의 지정과 변경 ... 158
접근 선언(access declaration) ... 164
외워야 할 표 ... 164
HAVE-A 관계(have-a relationship) ... 164
IS-A vs. HAVE-A ... 164
다른 모델, 오토마타(automata) ... 171
언제 오토마타를 이용하는가? ... 174
오토마타 설계 : 예(example) ... 178
객체 모델과 오토마타의 결합 ... 181
다중 상속(multiple inheritance) ... 183
실습문제 ... 184
10장 생성자(constructor), 소멸자(destructor) ... 185
new를 사용한 경우의 생성자 호출 ... 191
생성자의 오버로딩(overloading) ... 194
소멸자의 오버로딩? ... 197
함축적인 변환(implicit conversion) ... 197
생성자와 소멸자는 직접 호출할 수 없다? ... 199
explicit : 명시적 생성자 호출 ... 203
객체 배열(object array)에서 생성자 호출 ... 205
복사 생성자(copy constructor) ... 209
복사 생성자가 호출되는 경우 ... 217
리턴형의 (void) 형변환 ... 226
오해(misunderstanding) ... 227
베이스 클래스와 멤버 객체의 생성자 호출 ... 230
생성자와 소멸자의 접근 권한 ... 232
static 객체 생성자의 특별한 동작 ... 235
실습문제 ... 239
11장 범위 해결사(scope resolver) ... 241
멤버 함수의 정의 ... 243
전역과 지역의 구분 ... 244
정적 멤버의 접근 ... 246
상속에서 범위 해결 ... 248
이름공간의 범위표시 ... 251
실습문제 ... 251
12장 인라인 함수 ... 253
보이지 않는 오버헤드 : 프리픽스(prefix)와 서픽스(suffix) ... 254
매크로 함수(macro function) ... 257
인라인 함수 ... 257
템플릿(template) 인라인 함수 ... 259
자동 인라인(automatic inline) ... 259
주의사항 ... 261
인라인배열 ... 261
실습문제 ... 262
13장 친구(friends) ... 263
친구 클래스 : friendship principle ... 269
무서운 우정의 원리 ... 271
실습문제 ... 272
14장 가상함수 ... 273
가상(virtual)의 의미 ... 274
subtype의 원리(subtype principle) ... 274
하나의 인터페이스(interface)에 다수의 방법들, 가상함수, 추상클래스, 실행시 다형성 ... 279
순수 가상함수 ... 279
오버라이딩(overriding) ... 283
주의사항 : 베이스 클래스의 멤버함수에서의 가상함수의 호출 ... 288
COM(Component Object Model) ... 290
가상 베이스 클래스(virtual base class) ... 291
가상 소멸자(virtual destructor) ... 297
메시지 맵(message map) ... 299
Hello Windows 95! ... 302
Pointer to Member operator : .* and ->* ... 314
Error : Undeclared Identifier ... 314
가상 함수 테이블(VTable : virtual function table) : 진보된 주제 ... 315
외워야 할 표(table) ... 320
멤버 함수에 대한 포인터 ... 321
진보된 주제 : 가상 함수 테이블의 원리 ... 324
주의! 생성자 소멸자에서의 가상함수 호출 ... 335
다중 상속에서의 가상함수 테이블 ... 337
실습문제 ... 339
15장 this 포인터 ... 341
반드시 this가 필요한 경우 ... 346
상수 멤버 함수(const member function)와 mutable ... 353
실습문제 ... 357
16장 템플릿(template) : 메타(meta) 클래스 ... 359
명시적 지정(explicit specification) ... 365
클래스 템플릿(class template) ... 366
디폴트 지정 ... 376
typename ... 377
템플릿 안에 사용된 typedef ... 388
미리정의된 Template 파라미터(preparameterized template) ... 380
미리 정의된 파라미터를 가지는 템플릿 클래스 ... 402
진보된 주제 : STL(Standard Template Library) ... 407
아이터러터(iterator) ... 409
진보된 주제 : STL 개념 정리 ... 414
저자와의 대화 : 무엇을 공부해야 하는가? ... 417
실습문제 ... 419
17장 연산자 오버로딩(operator overloading) ... 421
더 유용한 도구 : 오버로딩 ... 422
왜 에러인가? ... 424
새로운 키워드 operator ... 425
컴파일러의 입장 : 나 피곤해요(^_^) ... 428
복사 생성자(copy constructor) ... 432
명시적 호출(explicit call) ... 433
불가능의 이유 : 친구가 필요하다! ... 434
오버로딩 할 수 없는 연산자 ... 440
형 변환 연산자(type conversion operator) ... 440
사용자 정의 형 변환 함수(user defined conversion operator) ... 442
다른 예들 ... 443
[]의 오버로딩 : 참조의 리턴 ... 443
>의 오버로딩 ... 447
()의 오버로딩 ... 448
크기를 설정 할 수 있는 행렬 ... 450
진보된 주제 : 펑터(functor) ... 455
++의 오버로딩 ... 457
=의 오버로딩 ... 461
>>의 오버로딩 ... 462
콤마(,)의 오버로딩 ... 462
->의 오버로딩 ... 464
진보된 주제 : ATL(ActiveX Template Library)에 사용된->의 오버로딩 ... 465
new와 delete의 오버로딩 ... 467
실습문제 ... 468
18장 Win32 메모리 모델 ... 469
페이지 : 외부 단편화로부터의 해방 ... 470
가상메모리 ... 476
Windows98, Windows 2000 ... 480
그 때 그 시절, 핸들(handle)이 필요했다! ... 485
실습문제 ... 480
19장 존재의 이유 ... 491
멤버 변수(member variable)의 주소 ... 492
static에 관한 진실 ... 496
마술 ... 498
토큰(token), 스캐너(scanner) ... 498
순수가상함수 ... 501
디폴트 생성자가 꼭 필요하다! ... 507
[]의 오버로딩 : 3차원 동적 배열 ... 513
실습문제 ... 514
20장 새로운 형태의 형 변환(typecasting) ... 515
해결되지 않은 천덕꾸러기 캐스팅(casting) ... 516
왜 캐스팅(casting)이 필요한가? ... 518
사용자 정의 형 변환 ... 519
static_cast ... 521
downcast ... 521
[수정] 하지만, 항상 안전하지 않음 ... 526
const_cast ... 527
dynamic_cast ... 528
reinterpret_cast ... 531
Type & Tricks ... 533
실습문제 ... 534
21장 RTTI(run-time type information) ... 535
왜 이것이 필요한가? ... 536
실행시에 객체의 클래스 이름 얻기 ... 537
매크로의 사용 ... 540
기우(imagined fear) : 잘 사용하지 않는 연산자 와 ... 540
: 스트링화 연산자 ... 540
: 토큰(token)연결 연산자 ... 541
무엇이 좋아졌는가? ... 543
동적생성(dynamic creation)을 지원하려면? ... 544
어떻게 동적 생성이 가능한가? ... 547
매크로 사용 전 소스 ... 547
매크로 사용 후 소스 ... 551
매크로와 CRuntimeClass 및 CObject가 'afx.h'에 미리 만들어져 있다고 가정했을때의 소스 코드 ... 555
새로운 형태의 형변환 : 추가된 키워드 ... 556
새로운 키워드 typeid ... 557
typeid의 정체 : 진보된 주제 ... 562
실습문제 ... 564
22장 이름 공간(namespace) ... 565
왜 namespace를 사용하는가? ... 567
namespace의 변수를 사용하는 법 ... 568
using의 범위 ... 570
클래스 안에서 using의 사용 ... 571
이름 공간의 별명(alias) ... 574
무명 이름공간(anonymous namespace) ... 575
전이적(transitive) ... 576
실습문제 ... 576
23장 예외처리(exception handling) ... 577
예외(exception)란? ... 578
결정(fault)과 오류(error) ... 578
고전적인 방법, 최근의 방법 ... 579
여러 catch 블락, 그래도...안되면... ... 584
try안의 try ... 587
예외의 제한 및 전파(propagation) ... 588
기교(technique) ... 590
컴파일러의 입장 : Stack Unwinding ... 592
표준 예외 처리 클래스(exception handling class) ... 593
그래도 없다면! ... 594
예외처리의 오버헤드 ... 595
구조적 예외 처리(SEH : structured exception handling) ... 595
실습문제 ... 560
24장 주의 사항 ... 597
짧은 평가(Short Circuit) ... 598
멤버 변수의 주소 ... 599
디폴트(default)선언에서의 초기화 ... 600
스트링 초기화 ... 601
static const의 초기화 ... 602
다음선택 ... 602
25장 키워드(keyword) ... 603
대체 토큰(alternative token) ... 604
키워드(keyword) ... 605
연산자와 구두점(operator and punctuator) ... 607
리터널 ... 607
실습문제 ... 608
26장 Stroustrup과의 실제 인터뷰 ... 609
The Real Stroustrup Interview ... 617
표준 C++(STANDARD C++) ... 618
새로운 기술의 실행가능성(Feasibility of new techniques) ... 619
표준 라이브러리(The Standard Library) ... 623
복잡성, C++와 객체 지향 프로그래밍 ... 625
자바와 C++(JAVA AND C++) ... 628
도구(TOOLS) ... 630
미래(THE FUTURE) ... 631
27장 표준화 유감 ... 633
using의 기능개선 : 객체의 범위 해결 ... 634
매크로 배열(macro array) ... 636
정적 변수와 정적 함수의 참조 ... 637
실습문제 ... 638
28장 코딩관례 ... 639
명칭 ... 640
장식 ... 643
메모리 샘 방지 ... 650
빈 스티링(empty string)과 널 스트링(null string) ... 651
복사문제(copying problem) ... 652
{의 위치 ... 652
enum 상수 ... 653
가상(vitual) ... 653
template의 위치 ... 654
파일 ... 654
문서화 ... 654
기타 ... 655
Part 2. 게임활용
29장 COM의 이해 ... 659
COM이란? ... 660
C++을 이용한 KBareCom의 설계 ... 662
C를 이용한 KBareCom의 설계 ... 664
C와 C++에 독립적으로 KBareCom을 정의하기 ... 667
COM의 정리 ... 671
실습문제 ... 672
30장 Functor의 이해 ... 673
펑터 ... 676
펑터의 추가적인 이점 ... 681
실습문제 ... 682
31장 GDI ... 683
Win32 코드의 생성 ... 684
그리는 코드의 추가 ... 688
Render()하뭇의 설명 ... 690
실습문제 ... 692
32장 왜 Matrix인가? ... 693
오래된 정의(definition) ... 694
왜 normalize된 서로 직각인 세 개의 축인가? ... 702
선형변환(linear transformation) ... 704
일관된 선형 변환 ... 707
3차원 벡터 클래스 ... 710
폴리곤(Polygon, 다각형) 표현 ... 712
회전 변환과 위치 변환 ... 718
매트릭스(matrix)클래스 ... 722
렌더링파이프라인(rendering pipeline) ... 736
실습문제 ... 739
33장 2차원 충돌검사 ... 741
사각형(rectangle) 충돌의 탐지 ... 742
선 충돌 ... 746
다각형 충돌검사 ... 753
L-시스템(L-system) ... 753
문맥 자유 문법(CFG, context free grammar) ... 753
예(example) ... 755
단계(1-3) ... 759
실습문제 ... 784
34장 알고리즘 ... 785
용어정의 ... 786
Rabin-Karp의 스트링 매칭 알고리즘 ... 787
이차원 패턴 매칭 ... 794
스트링 거리(String Distance) ... 794
타이핑거리(typing distance) ... 802
명령 자동 전환기 ... 803
실습문제 ... 810
부록
부록 1장 Xor 애니메이션 ... 614
부록 2장 브레즌햄(Bressenham) ... 820
부록 3장 배열과의 이혼 : 링크리스트(Linked_List) ... 832
부록 4장 팔레트 스크롤(palette Scroll) ... 844
부록 5장 Double Buffering ... 855
부록 6장 Stack ... 872
부록 7장 참조표(Look-Up Table) ... 880
부록 8장 몬테카를로 ... 886
부록 9장 클래스와 클래스의 계층을 설계하는 방법 ... 893
부록 10장 표준 템플릿 라이브러리(STL : standard template library) ... 901
닫기