목차 일부
Part 01 C++ 프로그래밍 입문
Part 1의 학습 목표 ... 49
Chapter 01 C++ 프로그래밍의 시작 ... 50
간단한 C++의 역사 ... 51
프로그램이란 무엇인가? ... 51
문제 해결 방식 ... 52
순차적 프로그래밍, 구조적 프로그래밍, 객체 지향 프로그래밍 ... 5...
더보기
목차 전체
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
더보기 닫기