목차
Part 01 C++ 프로그래밍 입문
   Part 1의 학습 목표 ... 49
   Chapter 01 C++ 프로그래밍의 시작 ... 50
      간단한 C++의 역사 ... 51
      프로그램이란 무엇인가? ... 51
      문제 해결 방식 ... 52
        순차적 프로그래밍, 구조적 프로그래밍, 객체 지향 프로그래밍 ... 52
      C++와 객체 지향 프로그래밍 ... 54
      C++는 어떻게 진화되어 왔는가? ... 55
      ANSI 표준 ... 55
      프로그램 준비 ... 56
      개발자의 개발 환경 ... 56
      원시 코드 컴파일하기 ... 57
      링커로 실행 가능한 파일 만들기 ... 57
      개발 주기 ... 58
      첫 번째 C++ 프로그램 작성, HELLO.cpp ... 59
        HELLO.cpp 예제의 입력과 컴파일 ... 59
      컴파일 오류들 ... 65
      Q/A ... 66
      실습해보기 ... 66
        퀴즈 ... 66
        연습 문제 ... 67
   Chapter 02 C++ 프로그래밍의 구성 요소 ... 68
      간단한 프로그램의 각 구성 요소 ... 69
      간단히 살펴보는 cout ... 70
      주석문 ... 72
        주석문의 형태 ... 72
        주석문 쓰기 ... 72
        각 파일의 처음에 필요한 주석들 ... 73
        주석에 대한 주의 사항 ... 74
      함수 ... 74
        함수 사용법 ... 75
      Q/A ... 77
      실습해보기 ... 78
        퀴즈 ... 78
        연습 문제 ... 78
   Chapter 03 변수와 상수 ... 79
      변수란 무엇인가? ... 80
        메모리 할당하기 ... 80
        정수(Integer)의 크기 ... 80
        Signed와 Unsigned ... 82
        기본적인 변수형 ... 82
      변수 정의하기 ... 83
        대ㆍ소문자의 구별 ... 84
        예약어 ... 84
      한꺼번에 같은 형 변수를 하나 이상 만들 때 ... 85
      변수에 값을 대입하는 법 ... 85
        typedef ... 86
      언제 short을 쓰고, 언제 long을 쓰는가? ... 87
        unsigned 정수형에서의 올림 초기화 ... 88
signed 정수에서의 올림 초기화 ... 89
      문자(Character) ... 90
        문자와 숫자 ... 90
        특수 출력 문자 ... 91
      상수 ... 91
        문자 상수 ... 92
        기호 상수 ... 92
      상수 나열형 ... 93
      Q/A ... 95
      실습해보기 ... 96
        퀴즈 ... 96
        연습 문제 ... 97
   Chapter 04 수식과 문장 ... 98
      문장 ... 99
        공백 문자 ... 99
        블록문과 복합문 ... 99
      수식문 ... 100
      연산자 ... 101
        대입 연산자 ... 101
        산술 연산자 ... 102
        정수 나눗셈과 나머지 연산 ... 103
      대입 연산자와 수학 연산자의 혼용 ... 103
      증가 연산자와 감소 연산자 ... 104
        전치 연산자와 후치 연산자 ... 104
      연산자 우선순위 ... 106
      중첩 괄호 ... 106
      참 값의 속성 ... 107
        관계 연산자 ... 107
      If 문장 ... 108
        들여쓰기 ... 111
        else ... 111
        복합 if 문 ... 113
      중첩 if 문에서의 중괄호 사용 ... 115
      논리 연산자 ... 117
        논리곱 ... 117
        논리합 ... 118
        논리적 부정 ... 118
      관계 연산자의 우선순위 ... 118
      참과 거짓에 대한 몇 가지 사항들 ... 119
      조건(삼항) 연산자 ... 119
      Q/A ... 121
      실습해보기 ... 122
        퀴즈 ... 122
        연습 문제 ... 122
   Chapter 05 함수 ... 124
      함수란 무엇인가? ... 125
      함수 선언과 정의 ... 125
        함수 선언 ... 125
        함수 원형 ... 126
        함수 정의 ... 128
      함수 실행 ... 129
      지역 변수 ... 129
      전역 변수 ... 132
      전역 변수 - 주의해야 할 단어 ... 133
      지역 변수에 대한 추가 사항 ... 133
      함수문 ... 135
      함수 인자 ... 135
        함수의 매개변수로 함수를 사용하는 함수 ... 135
      매개변수는 지역 변수 ... 136
      반환값 ... 137
      기본 매개변수 ... 139
      함수 오버로딩 ... 142
      함수에 관한 특별한 주제들 ... 144
        인라인 함수 ... 145
        재귀 호출 ... 146
      함수는 어떻게 동작되는가? ... 149
        추상화 단계 ... 150
        RAM 나누기 ... 150
        스택과 함수 ... 152
      Q/A ... 153
      실습해보기 ... 154
        퀴즈 ... 154
        연습 문제 ... 154
   Chapter 06 기본적인 클래스 ... 156
      새로운 자료형 만들기 ... 157
        왜 새로운 자료형을 만드는가? ... 157
      클래스와 멤버 ... 157
        클래스 선언 ... 158
        이름짓는 법 ... 158
        객체 정의 ... 159
        클래스와 객체 ... 159
        클래스 멤버에 접근 ... 160
        클래스가 아니라 객체에 대입하기 ... 160
        선언을 하지 않으면 클래스는 이를 가질 수 없다 ... 160
private과 public ... 161
        멤버 자료를 전용으로 만들기 ... 163
        전용성과 보안성에 대하여 ... 164
      클래스 메서드 구현 ... 166
      생성자와 소멸자 ... 168
        기본 생성자와 기본 소멸자 ... 169
      const 멤버 함수 ... 172
      인터페이스와 구현 ... 173
      클래스 선언과 메서드 정의를 어디에서 할 것인가? ... 175
      inline 구현 ... 176
      다른 클래스를 멤버 자료로 갖는 클래스 ... 179
      구조체 ... 182
        왜 두 개의 예약어는 같은 일을 할까? ... 182
      Q/A ... 183
      실습해보기 ... 184
        퀴즈 ... 184
        연습 문제 ... 185
   Chapter 07 프로그램의 흐름 ... 187
      순환문 ... 188
        순환문의 조상: goto ... 188
        왜 goto 문을 권장하지 않는가? ... 189
      while 순환문 ... 189
        다소 복잡해진 while 문 ... 190
        continue와 break ... 192
        while(1) 순환문 ... 195
      do...while 순환문 ... 196
        do...while ... 197
      for 순환문 ... 199
        for 순환문의 고급 사용 ... 201
        빈 for 순환문 ... 204
        중첩된 순환문 ... 205
        for 순환문에서의 범위 규칙 ... 206
      순환문 요약 ... 206
switch 문 ... 209
        메뉴 구성 프로그램에서 switch 문 사용하기 ... 212
      Q/A ... 215
      실습해보기 ... 215
        퀴즈 ... 216
        연습 문제 ... 216
   Part 01 마치면서 ... 218
      Part 01을 마치면서 ... 222
Part 02 효율적인 C++ 프로그래밍
   Part 2의 학습 목표 ... 225
   Chapter 08 포인터 ... 226
      포인터란 무엇인가? ... 227
        포인터에 주소를 저장 ... 228
        포인터 이름 ... 230
        간접 지정 연산자 ... 230
        포인터, 주소, 변수 ... 230
        포인터를 사용한 자료 연산 ... 231
        주소 관찰 ... 232
      도대체 왜 포인터를 쓰는가? ... 234
      스택과 자유 기억 공간(Free Store, 힙) ... 235
new ... 236
        delete ... 236
      메모리 누수 ... 238
      자유 기억 장소에 객체 만들기 ... 239
      객체 delete ... 239
      자료 멤버에 접근 ... 241
      자유 기억 공간의 멤버 자료에 대해 ... 242
      this 포인터 ... 243
      허상 포인터 ... 245
      const 포인터 ... 247
        const 포인터와 const 멤버 함수 ... 248
        const this 포인터 ... 249
      Q/A ... 250
      실습해보기 ... 251
        퀴즈 ... 251
        연습 문제 ... 251
   Chapter 09 참조자 ... 253
      참조자란 무엇인가? ... 254
      참조자에 주소 연산자 & 사용하기 ... 255
      무엇이 참조될 수 있는가? ... 258
      널 포인터와 널 참조자 ... 259
      함수 인수를 참조자로 전달하기 ... 260
        포인터를 이용한 swap()의 구현 ... 261
        참조자를 이용한 swap()의 구현 ... 262
      함수 헤더와 함수 원형에 대한 이해 ... 264
      여러 개의 값을 반환하는 법 ... 265
        참조자를 사용한 값 반환 ... 266
      효율성을 위해 참조자를 전달하자 ... 268
        상수 포인터 전달하기 ... 271
        그 대안으로써 참조자를 사용하자 ... 273
      참조자와 포인터를 사용하는 때 ... 275
      참조자와 포인터를 섞어서 사용할 때 ... 276
      범위 벗어난 객체에 대한 참조자를 반환하면 안 된다 ... 277
      힙에 있는 객체에 대한 참조자 반환하기 ... 278
      포인터, 도대체 누가 포인터를 가지고 있는가? ... 280
      Q/A ... 281
      실습해보기 ... 281
        퀴즈 ... 282
        연습 문제 ... 282
   Chapter 10 고급 함수들 ... 284
      멤버 함수 오버로딩 ... 285
      기본값 쓰기 ... 287
      기본값과 오버로딩 함수 중 어떤 것을 선택할 것인가? ... 289
      기본 생성자 ... 289
      생성자 오버로딩 ... 290
      객체 초기화 ... 291
      복사 생성자 ... 292
      연산자 오버로딩 ... 296
        증가 함수 만들기 ... 297
        전치 연산자 오버로딩하기 ... 298
        오버로딩 연산자 함수에서의 반환값 형 ... 300
        이름 없는 임시 객체 반환 ... 301
        this 포인터 사용하기 ... 303
        후치 연산자 오버로딩하기 ... 304
        전치 연산자와 후치 연산자의 차이 ... 304
        덧셈 연산자 ... 307
        operator+ 오버로딩 ... 308
        연산자 오버로딩에서 몇 가지 중요 사항들 ... 310
        연산자 오버로딩의 한계 ... 310
        무엇을 오버로딩시킬 것인가? ... 311
        대입 연산자 ... 311
      변환 연산자 ... 313
        형 변환 연산자 ... 316
      Q/A ... 318
      실습해보기 ... 318
        퀴즈 ... 318
        연습 문제 ... 319
   Chapter 11 배열 ... 320
      배열이란 무엇인가? ... 321
      배열 요소 ... 321
      배열의 끝을 지나 값을 저장할 경우 ... 322
      울타리 말뚝 오류 ... 325
      배열의 초기화 ... 325
      변수 선언 ... 326
      객체의 배열 ... 328
      다차원 배열 ... 329
      다차원 배열의 초기화 ... 330
      메모리에 관하여 ... 331
      포인터 배열 ... 332
      자유 기억 공간에 배열 선언하기 ... 333
      배열을 가리키는 포인터와 포인터가 저장된 배열 ... 334
      포인터와 배열명 ... 334
      자유 기억 공간의 배열 지우기 ... 336
      char 배열(문자 배열) ... 336
strcpy()와 strncpy() ... 339
      문자열 클래스 ... 340
      연결 리스트와 다른 구조체들 ... 347
      클래스 배열 ... 352
      Q/A ... 353
      실습해보기 ... 354
        퀴즈 ... 354
        연습 문제 ... 354
   Chapter 12 상속 ... 356
      상속이란 무엇인가? ... 357
        상속과 파생 ... 357
        동물의 왕국 ... 358
        파생 구문 ... 358
private과 protected ... 360
      생성자와 소멸자 ... 362
        기본 생성자에게 인수 전달하기 ... 365
      함수 오버라이딩 ... 369
        오버로딩과 오버라이딩 ... 371
        기본 클래스 메서드의 은폐 ... 371
        기본 메서드 호출 ... 372
      가상 메서드 ... 374
        가상 함수는 어떻게 동작하는가? ... 378
        없는 것을 얻을 수는 없다 ... 379
        분할하기 ... 379
        가상 소멸자 ... 381
        가상 복사 생성자 ... 382
        가상 메서드를 사용하는 대가 ... 385
      Q/A ... 386
      실습해보기 ... 386
        퀴즈 ... 386
        연습 문제 ... 387
   Chapter 13 다형성 ... 388
      단일 상속의 문제점 ... 389
        상승 ... 391
        하향 형 변환 ... 391
        두 개의 목록에 넣기 ... 394
      다중 상속 ... 394
        다중 상속 객체의 각 부분들 ... 397
        다중 상속된 객체에서의 생성자 ... 398
        모호성 해결 ... 400
        공유된 기본 클래스로부터 상속 ... 401
        가상 상속 ... 405
        다중 상속의 문제점들 ... 409
        혼합 그리고 만능 클래스 ... 409
      추상 자료형 ... 410
        순수 가상 함수 ... 413
        순수 가상 함수의 구현 ... 414
        추상의 복합 계층 ... 418
        어떤 형이 추상인가? ... 421
      Q/A ... 422
      실습해보기 ... 423
        퀴즈 ... 423
        연습 문제 ... 423
   Chapter 14 특수 클래스와 함수들 ... 424
      정적 멤버 자료 ... 425
      정적 멤버 함수 ... 430
      함수를 가리키는 포인터 ... 432
        함수 포인터를 사용하는 이유 ... 435
        함수 포인터 배열 ... 437
        함수 포인터를 다른 함수에 전달하는 방법 ... 439
        함수 포인터를 typedef로 선언하기 ... 441
      멤버 함수에 대한 포인터 ... 442
        멤버 함수 포인터에 대한 배열 ... 445
      Q/A ... 447
      실습해보기 ... 448
        퀴즈 ... 448
        연습 문제 ... 448
      Part 2 마치면서 ... 449
   Part 03 유용하고 실무적인 고급 프로그래밍
      Part 3의 학습 목표 ... 461
      Chapter 15 고급 상속 기능 ... 462
        포함 ... 463
        포함된 클래스의 멤버에 접근 ... 469
        포함된 멤버에 대한 접근 걸러내기 ... 469
        포함의 대가 ... 469
        값에 의한 복사 ... 471
        상속/포함, 대리 관점 구현 ... 473
        대리(Delegation) ... 474
        전용 상속 ... 482
        프렌드 클래스 ... 486
        프렌드 함수 ... 494
        프렌드 함수와 연산자 오버로딩 ... 494
        삽입 연산자 오버로딩 ... 498
        Q/A ... 500
        실습해보기 ... 500
        퀴즈 ... 500
        연습 문제 ... 501
   Chapter 16 스트림 ... 503
      스트림에 대한 개괄 ... 504
        캡슐화 ... 504
        버퍼링 ... 504
      스트림과 버퍼 ... 506
      표준 입ㆍ출력 객체 ... 506
      재지정 ... 507
      cin을 사용한 입력 ... 507
        문자열 ... 509
        문자열의 문제 ... 509
        istream 객체 참조자를 반환하는 연산자:〉〉 ... 512
      cin의 또 다른 멤버 함수 ... 512
        단일 문자 입력 ... 512
        표준 입력으로부터 문자열을 받는 방법 ... 514
        cin.ignore() 사용하기 ... 517
peek()와 putback() ... 518
      cout으로 출력 ... 518
        출력할 산출물을 방출함 ... 519
      관련된 함수들 ... 520
      조종자, 플래그, 규격 명령어 ... 521
        cout.width()를 사용하는 법 ... 521
        채울 문자의 설정 ... 522
        설정 플래그 ... 523
      스트림과 printf() 함수 ... 525
      파일의 입력과 출력 ... 527
        ofstream ... 527
        조건을 나타내는 상태 ... 528
        입ㆍ출력을 위한 파일 열기 ... 528
        파일 열기에서 ofstream 객체의 기본 작동을 변화시키는 법 ... 529
      이진 파일과 텍스트 파일 ... 531
      명령 줄 처리 ... 533
      Q/A ... 538
      실습해보기 ... 538
        퀴즈 ... 539
        연습 문제 ... 539
   Chapter 17 전처리계 ... 540
      전처리계와 컴파일러 ... 541
      중간 형태의 보기 ... 541
      define 지시자 사용하기 ... 541
        define 지시자를 사용한 상수 정의 ... 541
        검사용으로 define 지시자 사용 ... 542
        else 전처리계 지시자 ... 542
      포함 및 포함 감시자 ... 543
        라인 명령어 환경에서 정의하는 방법 ... 544
        undef 사용하기 ... 545
        조건부 컴파일 ... 546
      매크로 함수 ... 547
        왜 괄호들이 필요한가? ... 547
        매크로와 함수 및 템플릿 ... 549
      확장 함수 ... 549
      문자열 연산 ... 551
        문자열 만들기 ... 551
        문자열 연결 ... 551
      내장 매크로 ... 552
        assert() ... 552
        assert() 가지고 디버깅하기 ... 554
        assert()와 예외 사항 ... 554
        부작용 ... 554
        클래스의 불변성 ... 555
        중간값 출력 ... 560
        디버그 수준 ... 561
      Q/A ... 565
      실습해보기 ... 566
        퀴즈 ... 566
        연습 문제 ... 566
   Chapter 18 객체 지향 분석과 설계 ... 567
      개발 주기 ... 568
      경보 시스템 시뮬레이션 ... 568
        예비 설계 ... 569
        무엇이 객체인가? ... 569
        다른 객체들 ... 570
        클래스란 무엇인가? ... 570
        경보는 어떻게 보고되는가? ... 571
        이벤트 순환문 ... 571
      전자우편 시스템(PostMaster) ... 573
      생각은 여러 번, 결정은 한번에 ... 574
      분할한 후에 정복하라 ... 574
      메시지 규격화 ... 575
      초기 클래스 설계 ... 575
      순종과 잡종 계층 ... 576
      인터페이스 설계 ... 578
        프로토타입 만들기 ... 579
        80/80의 법칙 ... 579
      PostMasterMessage 클래스 설계 ... 580
        응용 프로그램 인터페이스 ... 580
        다수의 개발그룹이 참여하는 프로그래밍 ... 581
        설계에서 기타 고려 사항들 ... 582
      설계 시 판단 ... 582
        판단, 판단 ... 582
      구동 프로그램 ... 583
      Q/A ... 590
      실습해보기 ... 591
        퀴즈 ... 591
        연습 문제 ... 591
   Chapter 19 템플릿 ... 592
      템플릿이란 무엇인가? ... 593
      매개변수화된 형 ... 593
      템플릿 정의 ... 593
        이름을 사용하여 ... 595
        템플릿의 구현 ... 596
      템플릿 함수 ... 599
      템플릿과 프렌드 ... 599
        비 템플릿 프렌드 클래스와 함수 ... 600
        일반 템플릿 프렌드 클래스와 함수 ... 601
        형이 서술된 템플릿 프렌드 클래스와 함수 ... 602
      템플릿 항목 사용하기 ... 605
        특수 함수들 ... 609
        정적 멤버와 템플릿 ... 614
      Q/A ... 618
      실습해보기 ... 619
        퀴즈 ... 619
        연습 문제 ... 619
   Chapter 20 예외 사항과 오류 처리 ... 621
      버그, 오류, 실수, 녹슨 코드(Code Rot) ... 622
        예외 ... 622
        '녹슨 코드(Code Rot)'라는 말에 대해 ... 623
      예외 ... 623
        예외는 어떻게 사용되는가? ... 624
      try 블록과 catch 블록의 사용 ... 628
        예외 사항 잡기 ... 628
        하나 이상의 catch 문 ... 629
        예외 사항 계층 구조 ... 632
      예외의 자료와 예외 객체 명명법 ... 635
      예외 처리와 템플릿 ... 642
      오류가 없는 예외 사항 ... 644
      버그와 디버깅 ... 645
        분기점 ... 645
        경계점 ... 646
        메모리 살펴보기 ... 646
        어셈블러 ... 646
      Q/A ... 646
      실습해보기 ... 647
        퀴즈 ... 647
        연습 문제 ... 648
   Chapter 21 다음은 무엇을 할 것인가? ... 649
      표준 라이브러리 ... 650
      문자열 라이브러리 함수 ... 650
strcpy()와 strncpy() ... 651
strcat()과 strncat() ... 654
        다른 문자열 함수들 ... 655
      시간과 날짜 관련 함수 ... 655
stdlib ... 656
        qsort() ... 657
        다른 라이브러리 함수 ... 659
      비트 연산 ... 659
        비트 연산자 AND ... 660
        비트 연산자 OR ... 660
        배타적 비트 OR 연산자 ... 660
        보수 연산자 ... 660
        비트 설정 ... 660
        비트 초기화 ... 661
        비트 바꾸기 ... 661
        비트 필드 ... 662
      스타일 ... 665
        들여쓰기 ... 665
        중괄호 정렬 ... 665
        긴 줄의 처리 ... 665
switch 문 정렬 ... 665
        프로그램 코드 텍스트 ... 666
        상술자 명명법 ... 667
        이름에 철자 붙이기와 대문자 붙이기 ... 667
        주석 ... 667
        접근 ... 668
        클래스 정의 ... 668
        include 파일 ... 668
        assert() ... 669
        const ... 669
      다음 단계 ... 669
        어디에서 도움과 충고를 구할 것인가? ... 669
      Q/A ... 670
      실습해보기 ... 671
        퀴즈 ... 671
        연습 문제 ... 671
   Part 3 마치면서 ... 672
Part 04 부록
   Appendix A 연산자 우선순위 ... 685
   Appendix B C++ 예약어 ... 687
   Appendix C 퀴즈, 연습 문제 해답 ... 689
닫기