C++ 기초 플러스 5판 - (비공식) 정오표
강대기
이 서적은 번역한 사람이 무성의한 탓과 C++ 지식이 미비한 탓인지 상당히 오타가 많은 편이다. 본 정오표가 정확한 내용 숙지에 도움이 되길 바란다.
- 97쪽 - 중국어나 일본어에서 사용되는 표의문자도 --> 중국어나 일본어, 그리고 한글도 (중국어는 표의문자이나 일본어와 한국어는 표음문자임, 원작자의 무지의 소치)
- 125쪽 - 마지막 줄 "31600000초 = 365일, 46분, 40초" --> "31600000초 = 365일, 17시, 46분, 40초"
- 136쪽 - "I'd give my right arm to be " "a great (다음행) violinist.\n" --> "I'd give my right arm to be " (다음행) "a great violinist.\n" (편집 상의 오류)
- 137쪽 - #include <iostream> #include <cstring> --> #include <iostream> (다음행) #include <cstring> (#include 지시자는 언제나 그 행의 처음에서 시작해야 함)
- 156쪽 - char name[20] --> char name[20]; (명령문은 세미콜론(;)으로 끝나야 함)
- 234쪽 - 8번째 줄의 프로그램 코드의 주석문에서 "// 포인터 증가, 값을 취한다; 즉, arr[2], 또는 23.4" --> 영어를 직역하면서 저지른 실수이다. 영어에서 or은 "또는"이라는 의미도 있지만 "즉" 이라는 의미도 있다. 따라서 "// 포인터 증가한 후, 값을 취한다; 따라서 arr[2], 즉 23.4" 라는 식으로 번역해야 한다.
- 311쪽 - 그림 6.3 --> num이 5이면 default로 점프하고, num이 2이면 case 2로 점프해야 하므로, 화살표로 바뀌어야 함
- 378쪽 - 리스팅 7.8 에서 15번째 줄의 sum=sum_arr(cookies+4, cookies+8); 는 sum=sum_arr(cookies+4, cookies+7); 로 바뀌어야 함
- 379쪽 - 14번째 줄의 sum=sum_arr(cookies+4, cookies+8); 는 sum=sum_arr(cookies+4, cookies+7); 로 바뀌어야 함
- 430쪽 - 마지막 줄 "bunnies의 주소 = 0012FED4" --> 같은 줄 오른쪽에 있는 rodents의 주소값과 달라야 함
- 453쪽 - 10번째 줄부터 12번째 줄까지 두 번 나오는 "모드에 객체를 놓는다" --> 영어의 "put something in some mode"를 직역한 실수이다. "객체를 그 모드로 설정한다"가 적절한 번역이다.
- 461쪽 - 6번째 줄과 7번째 줄 "오버로딩되지 않는다." --> "오버로딩되지 않았다"
- 461쪽 - 23번째 줄과 24번째 줄 "const 변수에는 const 전달인자와 const가 아닌 전달인자를 둘 다 전달할 수 있지만, const가 아닌 변수에는 const가 아닌 전달인자만 전달할 수 있기 때문이다." --> "const 전달인자에는 const 변수와 const가 아닌 변수를 둘 다 전달할 수 있지만, const가 아닌 전달인자에는 const가 아닌 변수만 전달할 수 있기 때문이다."
- 484쪽 - 16번째 줄 "두 템플릿 함수 중에서, recycle<blot *>(blot *) 은 생성되는 도중에 변환이" --> "두 템플릿 함수 중에서, recycle<blot>(blot *) 은 생성되는 도중에 변환이"
- 487쪽 - 7번째 줄부터 10번째 줄까지 "역자는 ... 호출이 모호합니다." --> Microsoft Visual Studio 2005의 Visual C++ 8.0에서는 문제없이 컴파일 됨.
- 493쪽 - 17번째 줄부터 18번째 줄까지 "(역자는 ... 실패했다.)" --> Microsoft Visual Studio 2005의 Visual C++ 8.0에서는 문제없이 컴파일 됨.
- 509쪽 - 스택에 인자는 C/C++ 의 경우 오른쪽부터 들어간다. 즉, 스택 내에서 18 과 50L 의 위치가 바뀌어야 한다.
- 524쪽 - 16번째 줄과 17번째 줄 "공유하면서 상호작용한다." --> "공유하면서 상호작용하는 경우를 들 수 있다."
- 544쪽 - 밑에서 세번째 줄 "이 코드는 마치 using 지시자가 뒤에 있는 것처럼 동작한다." --> "이 코드는 마치 using 지시자가 바로 다음에 있는 것처럼 동작한다."
- 545쪽 - 첫번째 줄 "이름 공간에 이름이 하나도 지정되어 있지 않다면" --> "이름 공간을 부르기 위한 이름이 지정되어 있지 않다면"
- 571쪽 - 밑에서 두번째 줄 "클래스 메서드는 그 클래스의 private 부분에만 접근할 수 있다." --> "클래스 메서드는 그 클래스의 private 부분에 접근할 수 있다."
- 689쪽 - 12번째 줄 "Stone(double)" --> "Stonewt(double)"
- 722쪽 - 4번째 줄 "그러나 이 멤버 함수에 대해서는 더 이상 논의하지 않는다." --> "그러므로 이 멤버 함수에 대해서는 더 이상 논의하지 않겠다."
- 731쪽 - 16번째 줄 "10장에서, 대입 연산" --> "11,장에서, 대입 연산"
- 742쪽 - 30번째 줄 "return st1.str > st2.str;" --> "return (std::strcmp(st1.str,st2.str)> 0);"
- 762쪽 - 밑에서 두번째 줄 "포인터 pc1은 동일한 수치값을 buffer로 가지고 있다." --> "포인터 pc1은 buffer와 동일한 주소를 값으로 가지고 있다."
- 806쪽 - 밑에서 11 번째 줄 "기초 클래스 생성자가 틀림없이 먼저 생성될 것이다." --> "기초 클래스 생성자가 틀림없이 먼저 생성될 것이다."
- 806쪽 - 밑에서 11 번째 줄 "그래서 기초 클래스 생성자를 호출하는 것을 생략하면" --> "그래서 기초 클래스의 생성자를 호출하는 것을 생략하면"
- 806쪽 - 밑에서 10 번째 줄 "프로그램은 디폴트 기초 클래스 생성자를 사용한다." --> "프로그램은 기초 클래스의 디폴트 생성자를 사용한다."
- 834쪽 - 첫번째 줄 "또는 말기 결합 (lately binding)이라 한다." --> "또는 말기 결합 (late binding)이라 한다."
- 841쪽 - 밑에서 8 번째 줄 "가상 함수를 다지 정의하지 않으면" --> "가상 함수를 다시 정의하지 않으면"
- 893쪽 - 밑에서 두번째 줄 "그러나 개두 개의 Student" --> "그러나 두 개의 Student"
- 927쪽 - 밑에서 10번째 줄 "panache와 voice 멤버는 초기화 하지만, wk 전달인자에 있는 정보는 Waiter 종" --> "panache와 voice 멤버는 초기화 하지만, wk 전달인자에 있는 정보는 Worker 종"
- 941쪽 - 18번째 줄 "로 C::q()가 private이었다 할지라도, C::q()가 D::q()보다 비교 우위를 가진" --> "로 C::q()가 private이었다 할지라도, C::q()가 B::q()보다 비교 우위를 가진"
- 971쪽 - 14번째 줄 "cout << guy.blab(10, 2.5)" --> "cout << guy.blab(10, 2.3)"
- 979쪽 - 11번째 줄 "cout << "객체가 선언되지 않았다: ";" --> "cout << "선언된 객체 없음: ";"
- 980쪽 - 9번째 줄 "제 2 단계로 그 함수 안에서 다시 템플릿들을 프렌드로 선언하라." --> "제 2 단계로 템플릿 클래스 안에서 그 함수들을 프렌드로 선언하라."
- 980쪽 - 22번째 줄 "report<HasFriendT <TT>> (HasFriendT<TT> &)" --> "report<HasFriendT <TT> > (HasFriendT<TT> &)" (실은 >>라고 써도 Visual C++에선 별 문제 없어 보이지만, 아마도 다른 컴파일러나 옛날 컴파일러와의 호환성 문제들로 대부분의 C++ 제대로 된 책에서는 > > 로 표기함)
- 1032쪽 - 밑에서 9번째 줄 "그것은 그 사람에게 try 블록" --> "그것은 그 사람이 try 블록"