C++ FAQ KR

Marshall Cline이 운영하는 C++ FAQ Lite의 한글어 번역을 해주겠다고 했었다. 몇 년 전이었는데, 약속만 하고 못해줘서 늘 마음에 걸렸었다. 원래대로 http://kjune.com/cppfaqkr/index.html에 최종본을 놓을 예정 [1] 저작권 정보 <p style="padding-left: 30px;"> [1.1] 저자 [1.2] 저작권 공지 [1.3] 복사 허가 [1.4] 무보증 조항 [1.5] 상표 표기 [1.6] C++-FAQ-Lite != C++-FAQ-Book </p>

[2] 이 문서를 배포하는 온라인 사이트들 <p style="padding-left: 30px;"> [2.1] 이 문서의 미러 사이트들은 어디인가? [2.2] 원클릭 다운로드는 어떻게 어떻게 되었나? [2.3] 보스니아/세르비아/크로아티아어로 번역된 C++ FAQ Lite는 어디에 있나요? [2.4] 중국어로 번역된 C++ FAQ Lite는 어디에 있나요? [2.5] 불어로 번역된 C++ FAQ Lite는 어디에 있나요? [2.6] 그리스어로 번역된 C++ FAQ Lite는 어디에 있나요? [2.7] 한국어로 번역된 C++ FAQ Lite는 어디에 있나요? [2.8] 폴란드어로 번역된 C++ FAQ Lite는 어디에 있나요? [2.9] 포루트칼어로 번역된 C++ FAQ Lite는 어디에 있나요? [2.10] 러시아어로 번역된 C++ FAQ Lite는 어디에 있나요? [2.11] 터키어로 번역된 C++ FAQ Lite는 어디에 있나요? </p>

[3] C++-FAQ-Book 책과 C++-FAQ-Lite의 차이점 <p style="padding-left: 30px;"> [3.1] C++ FAQ Lite 이외에 C++ FAQ 책이 있습니까? [3.2] C++ FAQ Lite과 C++ FAQ 책간에 큰 차이점이 있습니까? </p>

[4] 최근에 변경된 사항 <p style="padding-left: 30px;"> [4.1] 03/07일자 변경사항은 무엇인가요? [4.2] 09/06일자 변경사항은 무엇인가요? [4.3] 03/06일자 변경사항은 무엇인가요? [4.4] 10/05일자 변경사항은 무엇인가요? [4.5] 07/05일자 변경사항은 무엇인가요? [4.6] 06/05일자 변경사항은 무엇인가요? [4.7] 05/05일자 변경사항은 무엇인가요? [4.8] 04/05일자 변경사항은 무엇인가요? [4.9] 03/05일자 변경사항은 무엇인가요? [4.10] 02/05일자 변경사항은 무엇인가요? [4.11] 12/04일자 변경사항은 무엇인가요? [4.12] 06/04일자 변경사항은 무엇인가요? [4.13] 08/03일자 변경사항은 무엇인가요? [4.14] 06/03일자 변경사항은 무엇인가요? [4.15] 05/03일자 변경사항은 무엇인가요? [4.16] 04/03일자 변경사항은 무엇인가요? [4.17] 03/03일자 변경사항은 무엇인가요? [4.18] 02/03일자 변경사항은 무엇인가요? [4.19] 01/03일자 변경사항은 무엇인가요? [4.20] 12/02일자 변경사항은 무엇인가요? [4.21] 09/02일자 변경사항은 무엇인가요? [4.22] 06/02일자 변경사항은 무엇인가요? [4.23] 05/02일자 변경사항은 무엇인가요? [4.24] 04/02일자 변경사항은 무엇인가요? [4.25] 03/02일자 변경사항은 무엇인가요? [4.26] 08/01일자 변경사항은 무엇인가요? [4.27] 04/01일자 변경사항은 무엇인가요? [4.28] 07/00일자 변경사항은 무엇인가요? [4.29] 03/00일자 변경사항은 무엇인가요? [4.30] 01/00일자 변경사항은 무엇인가요? [4.31] 10/99일자 변경사항은 무엇인가요? [4.32] 07/99일자 변경사항은 무엇인가요? [4.33] 06/98일자 변경사항은 무엇인가요? [4.34] 05/98일자 변경사항은 무엇인가요? [4.35] 09/97일자 변경사항은 무엇인가요? [4.36] 01/97일자 변경사항은 무엇인가요? [4.37] 11/96일자 변경사항은 무엇인가요? [4.38] 10/96일자 변경사항은 무엇인가요? [4.39] 09/96일자 변경사항은 무엇인가요? [4.40] 08/96일자 변경사항은 무엇인가요? [4.41] 07/96일자 변경사항은 무엇인가요? [4.42] 06/96일자 변경사항은 무엇인가요? [4.43] 05/96일자 변경사항은 무엇인가요? [4.44] 04/96일자 변경사항은 무엇인가요? [4.45] 03/96일자 변경사항은 무엇인가요? [4.46] 09/95일자 변경사항은 무엇인가요? [4.47] 06/95일자 변경사항은 무엇인가요? [4.48] 04/95일자 변경사항은 무엇인가요? [4.49] 03/95일자 변경사항은 무엇인가요? [4.50] 01/95일자 변경사항은 무엇인가요? [4.51] 12/94일자 변경사항은 무엇인가요? [4.52] 11/94일자 변경사항은 무엇인가요? [4.53] 08/94일자 변경사항은 무엇인가요? [4.54] 08/94일 이전의 변경사항은 무엇인가요? </p>

[5] comp.lang.c++에 글을 올릴 때 지켜야할 네티켓 <p style="padding-left: 30px;"> [5.1] IMHO가 무슨뜻입니까? (IMO, IMNSHO, FWIW, OTOH 등등)? [5.2] 제 숙제 때문에 다른 사람의 도움을 받으려고 하면 어떻게 해야 하나요? [5.3] 만약 숙제 질문을 포스팅 한 사람을 보면 어떻게 해야 하나요? [5.4] 일반적인 네티켓은 어디에서 찾을 수 있나요? [5.5] FAQ에 있는 질문을 했을 경우에는 어떻게 해야 하나요? [5.6] 잠시만요, 전에는 FAQ에 이미 있는 질문에 대해서는 답하지 말라고 하지 않았었나요? [5.7] 제목은 어떻게 달아야 효과적인가요? [5.8] 제대로 동작하지 않는 코드에 관한 질문은 어떻게 해야 하나요? [5.9] 어떤 뉴스그룹에 내 질문을 올려야 하나요? [5.10] comp.lang.c++에 일자리에 대한 광고나 이력서를 올려야 하나요? [5.11] 일이 필요한데, 이 때 comp.lang.c++에 내 이력서를 올려도 되나요? [5.12] 주제에 벋어난 포스팅이 있을 경우에는 어떻게 해야 하나요? [5.13] 스팸은 어덯게 해야 하나요? [5.14] 특정 뉴스그룹에 대한 FAQ는 어디에서 얻을 수 있나요? </p>

[6] 거시적인 문제제기 <p style="padding-left: 30px;"> [6.1] C++은 실용적인 언어인가? [6.2] C++은 완벽한 언어인가? [6.3] 객체지향이 중요한 이유는 무엇인가? [6.4] 제네릭 프로그래밍이 중요한 이유는 무엇인가? [6.5] 7.5 C++이 Ada보다 나은 언어인가? (비주얼 베이직, C, 포트란, 파스칼, Smalltalk,혹은 다른 언어) [6.6] 누가 c++를 쓰는가? [6.7] OO/C++를 배우는데 시간이 얼마나 걸리는가? [6.8] 사업적인 관점에서 C++의 특징은 무엇인가? [6.9] OO/C++에서 virtual함수 (동적 결합)이 중요한가? [6.10] 저는 미조리 출신인데요, 왜 가상 함수가 (동적 결합)이 큰 차이를 만드는지 간단히 설명해 주세요? [6.11] C++가 ANSI/ISO C 표준에 하위 호환을 보장하는가? [6.12] C++는 표준화 되어있는가? [6.13] ANSI/ISO C표준은 어디에서 얻을 수 있는가? [6.14] 면접볼 때 지원자의 실체를 파악할 수 있는 좋은 “면접 질문”은? [6.15] “이런 저런 것은 나쁘다”라고 하는 FAQ의 것은 무엇을 의미하느냐? [6.16] 앞으로 제가 소위 말하는 “나쁜” 생성자를 사용하게 될까요? [6.17] “좋은 클래스 디자인” 중에서 “좋은 객체 지향”의 올바른 기술적인 정의를 아는 것이 중요한가요? [6.18] “FAQ”라는 뜻이 잘못 사용되고 있다고 하는 사람들에게 뭐라고 해야할까요? FAQ가 답변 보다는 문제에 더 치중하고 있고, 차라리 다른 약자를 사용해야 한다고 생각하는 데요? Updated! </p>

[7] 클래스와 객체 <p style="padding-left: 30px;"> [7.1] 클래스란 무엇인가? [7.2] 객체란 무엇인가? [7.3] 언제 인터페이스를 사용하는 것이 좋은가요? [7.4] 캡슐화란 무엇인가? [7.5] C++을 사용하면 안정성과 사용자 편의성간의 상충관계에 어떻게 도움이 될 수 있나요? [7.6] 다른 프로그래머들이 내가 만든 클래스의 private 부분을 볼 수 있게 되므로서 캡슐화를 깨는 것을 어떻게 방지할 수 있을까요? [7.7] 캡슐화는 안전 장치인가요? [7.8] struct와 class 키워드 간의 차이는 무엇인가요? </p>

[8] 레퍼런스 <p style="padding-left: 30px;"> [8.1] 레퍼런스란 무엇인가요? [8.2] 레퍼런스에 할당을 하면 무슨일이 생기나요? [8.3] 레퍼런스를 반환하면 무슨 일이 생기나요? [8.4] object.method1().method2()은 무슨 뜻인가요? [8.5] 어떻게 하면 레퍼런스를 리셋해서 다른 객체를 가리키도록 할 수 있나요? [8.6] 언제 레퍼런스를 사용하고, 언제 포인터를 사용해야 하나요? [8.7] 객체에 대한 핸들이란 무엇인가요? 이건 포인터인가요? 레퍼런스인가요? 포인터를 가리키는 포인터인가요? 무엇인가요? </p>

[9] 인라인 함수 <p style="padding-left: 30px;"> [9.1] 인라인 함수란 무엇인가요? [9.2] 절차적 통합의 간단한 예를 들어주시겠어요? [9.3] 인라인 함수를 사용하면 성능이 나아지나요? [9.4] 인라인 함수를 사용했을 때 안정성과 속도간에 어떤 이득과 손실이 있나요? [9.5] #define 매크로 대신에 반드시 인라인 함수를 사용해야 하는 이유가 무엇인가요? [9.6] 멤버 함수가 아닌 함수를 어떻게 인라인으로 만들라고 컴파일러에 지정할 수 있나요? [9.7] 멤버 함수를 인라인으로 만들라고 컴파일러에 지정하는 방법은 무엇인가요? [9.8] 멤버 함수를 인라인으로 만들라고 컴파일러에 지정하는 다른 방법이 있나요? [9.9] 함수 밖에 정의된 멤버 인라인 함수에 대해서, 이들은 함수 본문 안에 선언을 해서 인라인으로 선헌하는 것이 가장 좋나요? 클래스 바깥쪽에 정의를 하는 것이 좋나요 아니면 두 방법 모두 좋나요? </p>

[10] 생성자 <p style="padding-left: 30px;"> [10.1] 생성자란 무엇인가요? [10.2] List x; 와 List x();의 차이가 무엇인가요? [10.3] 한 클래스의 생성자 안에서 같은 클래스의 다른 생성자를 호출해서 객체를 초기화 할 수 있나요? [10.4] Fred 객체의 기본생성자는 항상 Fred::Fred() 인가요? [10.5] Fred 객체의 배열을 만들 때 어떤 생성자가 먼저 호출되나요? [10.6] 내 생성자들이 “초기화 리스트”를 사용해야 하나요? “할당”을 사용해야 하나요? [10.7] 생성자에서 this 포인터를 사용해야 하나요? [10.8] “이름 지어진 생성자 문구(Named Constructor Idiom)”란 무엇인가요? [10.9] 값을 반환하는 것이 추가적인 복사와 부하를 발생시키나요? [10.10] 내 생성자의 초기화리스트에서 내 정적 멤버 데이터를 생성시킬 수가 없는데 왜 그런가요? [10.11] 정적 데이터 멤버를 가지고 있는 클래스에서 왜 링크 에러가 나나요? [10.12] “정적 초기화 순서 문제”란 무엇인가요? [10.13] “정적 초기화 순서 문제”를 방지하기 위해서는 무엇을 해야 하나요? [10.14] 왜 처음 사용하는 생성자 관용구가 정적 포인터 대신 정적 객체를 사용하지 않나요? [10.15] 네 정적 데이터 멤버에 대해서 “정적 초기화 순서 문제”를 방지하려면 어떻게 해야 하나요? [10.16] 기본 데이터 타입으로 선언된 변수에 대해서도 “저적 초기화 순서 문제”를 걱정해야 하나요? [10.17] 실폐하는 생성자를 어떻게 처리해야 하나요? [10.18] “이름지어진 파라매터 관용구(Named Parameter Idiom)”란 무엇인가요? [10.19] Foo x(Bar())로 Foo 객체를 선언할 때 에러가 나는데 왜 그런건가요? </p>

[11] 소멸자 <p style="padding-left: 30px;"> [11.1] 소멸자란 무엇인가요? [11.2] 어떤 순서로 지역 변수들은 소멸되나요? [11.3] 배열에 있는 객체는 어떤 순서로 소멸되나요? [11.4] 내 클래스에 있는 소멸자를 오버로드 할 수 있나요? [11.5] 지역 변수에 대해서 명시적으로 소멸자를 호출해야 하나요? [11.6] 만약에 지역 변수가 함수안에서 마지막 }에 가기전에 소멸되기를 원한다면 어떻게 해야하나요? 지역 변수에 대해 직접적으로 소멸자를 불러야 하나요? [11.7] 알겠어요 알겠어요. 지역 변수에 대해서는 명시적으로 소멸자를 부르지 않을까요. 그하지만 다음 같은 경우에는 어떻게 처리해야 하죠? [11.8] 가상적인 블럭안에 로컬 변수를 포함시키지 못할 경우에는 어떻게 해야 하나요? [11.9] 만약 내가 내 객체를 new로 할당했다면 명시적으로 소멸자를 부를 수 있는 것 아닌가요? [11.10]어떤 것이 “위치할당하는 new(placement new)” 이며 언제 사용해야 하나요? [11.11] 소멸자를 작성할 때, 명시적으로 내 멤버 객체에 대한 소멸자를 호출해야 하나요? [11.12] 내가 상속받은 클래스의 소멸자를 작성할 때, 상위 클래스의 소멸자를 명시적으로 호출해야 하나요? [11.13] 문제가 발생했을 때내 소멸자들에서는 예외를 발생시켜야 하나요? [11.14] new를 사용할 때 메모리의 특정지역에서 메모리를 강제적으로 할당할 수 있는 방법이 있나요?</p> [12] 할당 연산자 <p style="padding-left: 30px;"> [12.1] “재귀 할당”이란 무엇인가? [12.2] 왜 “재귀 할당”에 대해 걱정해야 하나요 [12.3] 알았어요. 재귀할당 문제를 해결하면 되잖아요. 어떻게 하면 되죠? </p>

[13] 연산자 오버로딩 <p style="padding-left: 30px;"> [13.1] 연산자 오버로딩이란 무엇인가요? [13.2] 연산자 오버로딩의 잇점은 무엇인가요? [13.3] 연산자 오버로딩의 예에는 어떤 것들이 있나요? [13.4] 연산자 오버로딩을 사용하니 클래스가 지저분해 보이네요, 사용하면 코드가 더 간결해져야 하는 것 아닌가요? [13.5] 어떤 연산자들이 오버로딩 될 수 있고, 어떤 것들이 불가능 한가요? [13.6] 연산자 == 를 오버로딩해서 2개의 char[]를 문자열 비교로 비교할 수 있도록 할 수도 있나요? [13.7] 연산자** 를 만들어서 “의 몇 승” 연산을 만들 수 있나요? [13.8] 네 이제 어떤 연산자를 오버로드 할 수 있는지 알겠어요; 어떤 연산자를 반드시 오버로드 해야 하나요? [13.9] 연산자를 오버로드하는 몇 가지 가이드라인이나 법칙 같은 것이 있나요? [13.10] 행렬 클래스에서 subscript 연산자를 어떻게 만드나요? [13.11] 왜 내행렬 클래스의 인터페이스가 배열의 배열처럼 보이면 안되나요? [13.12] 아직도 잘 모르겠네요, 왜 내 행렬 클래스가 배열의 배열처럼 보이면 안된다구요? Updated! [13.13] 클래스를 설계할 때 인터페이스 외부로 부터(인터페이스 먼저) 설계해야 하나요 내부로 부터(데이터 먼저) 설계해야 하나요? [13.14] 연산자 ++와 –의 전치 후치 형태는 어떻게 오버로드 할 수 있나요? [13.15] i++ 와 ++i중에 어떤 것이 더 효율적인가요?</p> [14] 프랜드 <p style="padding-left: 30px;"> [14.1] 프랜드란 무엇인가요? [14.2] 프랜드를 쓰면 캡슐화를 위반하게 되나요? [14.3] 프랜드 함수를 사용하면 어떤 점이 유리하고 어떤 점이 불리한가요? [14.4] “프랜드 관계는 상속되지도 않고, 목적성도 없고, 상호성도 없다”는 말이 무슨 뜻인가요? [14.5] 클래스를 만들 때 멤버 함수로 만드는 것이 좋나요? 프랜드 함수로 만드는 것이 좋나요?</p> [15] 를 이용한 입출력</a> <p style="padding-left: 30px;"> [15.1] 왜 전통적인 방식 대신에 이 방식을 사용해야 하나요? [15.2] 왜 누가 잘못된 문자를 입력했을 때 내 프로그램이 무한루프에 빠지 나요? [15.3] std::cin에서 잘못된 입력값은 건너뛰도록 할려면 어떻게 해야 하나요? [15.4] 이 이상한 while (std::cin >> foo)은 어떻게 작동하는 것인가요? [15.5] 왜 내 입력값이 파일끝(EOF)를 넘어서 작동하는 것 처럼 보이나요? [15.6] 왜 내 프로그램이 첫번째 반복문을 넘은 다음에는 내 입력을 무시하나요? [15.7] 라인의 끝을 std::endl로 마쳐야 하나요 'n'으로 마쳐야 하나요? [15.8] 내 클래스 Fred에 인쇄기능을 지원하고 싶은데, 어떻게 해야 하나요? [15.9] friend 함수를 사용하기 보다는 항상 printOn()이란 함수를 사용해야 하지 않나요? [15.10] 내 클래스 Fred에 어떻게 입력기능을 추가할 수 있나요? [15.11] 전체 클래스 구조에서 인쇄기능을 넣으려면 어떻게 해야 하나요? [15.12] 바이너리 모드로 스트림을 열려면 어떻게 해야 하나요? [15.13] 바이너리 모드에서 std::cin과 std::cout을 어떻게 하면 다시 열 수 있나요? [15.14] 데이터 파일로 부터 내 클래스에 있는 객체로 어떻게 읽고 쓰고 할 수 있나요? [15.15] 다른 컴퓨터로 부터 내 클래스에 있는 객체로 어떻게 정보를 전달할 수 있나요? (소켓을 통해서, TCP/IP, FTP, 이메일, 무선 링크 등)? [15.16] 다른 디렉토리(예를 들면 "..test.dat")에 있는 파일은 왜 열 수 없나요? [15.17] 사용자가 Enter키를 누르기 전에 키가 눌렸는지, 무슨 키가 눌렸는지 알 수 있나요? [15.18] 어떻게 하면 사용자가 누른 키들이 스크린에 나타나지 않도록 할 수 있나요? [15.19] 스크린에서 커서를 어떻게 움직일 수 있나요? [15.20] 스크린은 어떻게 지울 수 있나요? clrscr()같은 것이 있나요? [15.21] 스크린의 색깔은 어떻게 바꾸나요?</p> [16] 포인터 제거 관리 <p style="padding-left: 30px;"> [16.1] delete p를 하면 포인터 p를 지우나요 아니면 포인터가 가르키는 데이터 *p를 지우나요? [16.2] 같은 포인터를 2번 제거하는 것은 안전한가요? [16.3] new로 할당한 포인터를 free()로 지울 수 있나요? malloc()으로 할당한 포인터를 delete로 지울 수 있나요? [16.4] 왜 오랫동안 믿음직해왔던 malloc()대신에 new를 사용해야 하나요? [16.5] new를 통해서 할당된 포인터들에 realloc()을 사용할 수 있나요? [16.6] p = new Fred() 를 한 후에 NULL을 체크할 필요가 있나요? [16.7] 어떻게 하면 내 (오래된) 컴파일러가 자동으로 new를 체크해서 NULL을 반환하는지 검사할 수 있나요? [16.8] delete p하기전에 NULL 체크를 해야하나요? [16.9] delete p라고 하기 전에 어떤 두가지 단게가 일어나나요? [16.10] p = new Fred()에서, 만약 Fred 생성자가 예외를 발생시키면 이 때 메모리 누수가 발생하나요? [16.11] 어떤 것의 배열을 어떻게 할당/해제 시키나요? [16.12] new T[n]으로 생성된 배열 객체에 대해서 []로 지우는 것을 잊어버리면 무슨 일이 발생하나요? [16.13] 기본 데이터 형(char, int 등)으로 만들어진 배열을 지울 때 []를 빼도 되나요? [16.14] p = new Fred[n] 한 후에, delete [] p로 배열을 지울 때 어떻게 n개의 객체를 지워야 하는지 아나요? [16.15] 멤버 함수에서 delete this라고 하는 것이 합법적인가요? [16.16] 어떻게 new를 이용해서 다차원 배열을 할당할 수 있나요? [16.17] 지난 번 FAQ의 코드는 매우 어렵고 에러 나기도 쉬웠어요. 더 간단한 방법은 없나요? [16.18] 위의 행렬 클래스는 Fred에 특별히 적용된 경우였어요. 이 것을 일반적으로 사용할 수 있는 방법은 없나요? [16.19] 행렬 템플릿을 만들 수 있는 다른 방법은 없나요? [16.20] C++에는 길이를 실행 중에 지정할 수 있는 배열이 있나요? [16.21] 객체들이 전역 객체나 전역 객체로 선언되지 않고 new를 통해서 만들어 지도록 강제하는 방법은 없나요? [16.22] 어떻게 간단한 레퍼런스 카운팅을 할 수 있나요? [16.23] 복사해서 저장히기 기법(copy-on-write semantics)으로 어떻게 레퍼런스 카운팅을 할 수 있나요? [16.24] 어떻게 클래스 전체에 대해서 복사해서 저장하는 기법(copy-on-write semantics)으로 레퍼런스 카운팅을 할 수 있나요? [16.25] 사용자들이 레퍼런스 카운팅 기법을 사용하는 것을 완벽히 막을 수 있나요? 만약 막을 수 있다면 그렇게 하는게 옳을까요? [16.26] C++에서 가베지 콜력션을 사용할 수 있나요? [16.27] C++에서의 가베지 콜렉션의 2가지 종류는 무엇인가요? [16.28] C++에서 가베지 콜렉션에 대한 더 많은 정보를 어디서 얻을 수 있나요?</p> [17] 예외처리와 에러처리 <p style="padding-left: 30px;"> [17.1] 어떻게 하면 try / catch / throw를 사용해서 소프트웨어의 품질을 향상시킬 수 있나요? [17.2] 생성자에서 문제가 생길 경우에 어떻게 처리해야 하나요? [17.3] 소멸자에서 문제가 생길 경우에 어떻게 처리해야 하나요? [17.4] 만약에 생성자에서 예외를 발생시킬 경우에 리소스들을 어떻게 처리해야 하나요? [17.5] 만약에 어딘가에서 예외가 발생되었을 경우에 메모리 누수를 방지하기 위해서 문자열(char형의 배열)을 바꿔야 하나요? [17.6] throw에는 무엇을 작성해야 하나요? [17.7] 무엇을 catch해야 하나요? [17.8] MFC에서는 포인터로 catch하기를 사용하기를 권장하는 것 같더군요. 나도 똑같이 해야 하나요? [17.9] 무엇이 throw되며 이것은 무슨 뜻인가요(throw 키워드 이후에 예외 객체가 없는 경우에)? 이것을 어디에 사용해야 하나요? [17.10] 어떻게 다형성적으로 throw할 수 있나요? [17.11] 이 객체를 throw할 경우에 이 것은 몇 번이나 복사가 되나요? [17.12] 예외 처리를 하니 인생이 더 복잡해 지는 것 같네요; 확실히 내 문제는 아니네요, 문제인가요? [17.13] 너무 많은 try 블럭이 있네요. 이것을 어떻게 해야 하나요?</p> [18] Const 올바르게 사용하기 <p style="padding-left: 30px;"> [18.1] "const 올바르게 사용하기(const correctness)"란 무엇인가요? [18.2] "const 올바르게 사용하기"는 전통적인 형 안정성과 어떻게 연관되어 있나요? [18.3] const를 제대로 사용하는 것을 "곧" 혹은 "나중에" 해야 하나요? [18.4] "const Fred* p"는 무슨 뜻인가요? [18.5] "const Fred* p", "Fred* const p" 그리고 "const Fred* const p" 간의 차이점은 무엇인가요? [18.6] "const Fred& x"는 무슨 뜻인가요? [18.7] "Fred& const x"은 말이 되나요? [18.8] "Fred const& x"는 무슨 뜻입니까?? [18.9] "Fred const* x"는 무슨 뜻입니까? [18.10] 무엇이 "const 멤버 함수"인가요? [18.11] 레퍼런스로 반환하기와 const 멤버 함수간의 관계는 무엇인가요? [18.12] "const 오버로딩"은 무엇인가요? [18.13] 내 const 멤버함수를 통해서 멤버 값에 "보이지 않게" 값을 변화하고 싶다면 어떻게 해야 하나요? [18.14] const_cast를 사용하면 최적화 기회를 잃어버리나요? [18.15] const int*로 지정한 포인터에 해당되는 int 값을 컴파일러에서 바꿀 수 있는데 왜 그런가요? [18.16] "const Fred* p"라는 표현은 *p가 변할 수 없다는 뜻인가요? [18.17] Foo **를 const Foo**로 변환할 때 왜 에러가 나나요?</p> [19] 상속 - 기본 <p style="padding-left: 30px;"> [19.1] 상속이 C++에서 중요한가요? [19.2] 언제 상속을 사용하나요? [19.3] C++에서 상속을 표현하려면 어떻게 해야 하나요? [19.4] 하위 클래스의 포인터를 상위 클래스로 변환해도 괜찮나요? [19.5] public, private, protected 간의 차이는 무엇인가요? [19.6] 왜 상위 클래스에서 private로 선언한 변수를 상속 받은 클래스에서 제어할 수 없나요? [19.7] 상위 클래스의 내부적인 부분들을 바꿀 때 어떻게 하면 상속 받은 클래스에서 문제가 생기지 않도록 할 수 있나요? [19.8] protected로 데이터를 선언하지 말고 대신 항상 private로 데이터를 선언하고, protected로 선언된 함수로 값을 조절하는 것이 좋다는 이야기를 들었습니다. 이렇게 하는 것이 좋은 방법인가요? [19.9] 알겠어요. 그래서 정확하게 어떻게 "protected interface"를 사용할 지 결정해야 하나요?</p> [20] 상속 — 가상 함수 <p style="padding-left: 30px;"> [20.1] "가상 멤버 함수"란 무엇인가요? [20.2] C++에서 정적 형은 유지하면서 동적인 바인딩을 얻는 방법은 무엇인가요? [20.3] 가상 멤버 함수와 가상이 아닌 멤버 함수 사이에 호출되는 방식의 차이는 무엇인가요? [20.4] 가상함수를 호출할 때 하드웨어적으로는 어떤 일이 생기는가? 얼마나 많은 간접 참조의 계층이 있으며, 이 때의 오버헤드는 얼마나 되나요? [20.5] 상속 받은 클래스의 멤버함수가 베이스 클래스의 같은 함수를 호출하고자 할 때는 어떻게 해야 하느냐요? [20.6] 균일하지 않는 목록이 있는데, 내 코드에서는 각 객체별로 클래스에 따른 다른 일을 해야 한다. 이러면 동적 바인딩을 쓰면 좋을 것 같은데 어떻게 해야할지 모르겠다. 어떻게 해야하느냐요? Updated! [20.7] 소멸자에서 virtual을 선언해야 할 때는 언제인가요? [20.8] "가상생성자"란 무엇인가요?</p> [21] 상속 — 적절한 상속과 대체성 <p style="padding-left: 30px;"> [21.1] 네 상위 클래스에서는 public이었던 함수를 상속 받은 클래스에서는 감춰야 하나요? [21.2] 상속받은 포인터 Derived*를 상위 클래스 Base*로 변환하는 것은 가능한데, 왜 Derived**를 Base**는 가능하지 않나요? [21.3] 다양한 차량의 많은 차를 주차시키기(parking-lot-of-Vehicle)이 많은 수의 자당차 주차시키기(parking-lot-of-Car)의 일부분인가요? [21.4] 하위 클래스의 배열이 상위 클레스의 배열의 일부분인가요? [21.5] 하위 클래스의 배열이 상위 클래스의 배열의 일부분이 아니라는 것은 배열은 나쁘다는 뜻인가요? [21.6] 원이 타원의 한 종류인가요? [21.7] "원이 타원의 한 종류이냐 아니냐" 딜레마에 대한 다른 의견이 있나요? [21.8] 난 수학 박사학위 소유자입니다.전 원이 타원의 한 종류라고 확신해요. 그렇다면 Marshall Cline이 바보인가요? C++이 바보인가요? 객체지향이 바보인가요? [21.9] 그렇다면 원으로부터 타원을 상속받아와야 하나요? [21.10] 내가 풀려고 하는 문제는 원이나 타원이랑 아무 상관이 없는데, 이 어리석어 보이는 예가 나한테 어떻게 적용이 될 까요? [21.11] 이게 무슨 연관관계가 있나요??!? 원이나 타원은 용어는 수학적으로 정의된 것 아닌가요? [21.12] 만약 SortedList가 List와 정확히 동일한 public 인터페이스를 가지고 있다면, SortedList도 List의 한 종류인가요?</p> [22] 상속 — 가상 기본 클래스(ABCs) <p style="padding-left: 30px;"> [22.1] 인터페이스와 구현을 구별하는 큰 이유가 무엇인가요? [22.2] C++에서는 구현부와 인터페이스를 어떻게 구분할 수 있나요? (도뮬라-2와 같이) [22.3] ABC는 무엇인가요? [22.4] "순수 가상" 멤버 함수란 무엇인가요? [22.5] (가상) 기본 클래스로의 포인터를 포함하는 클래스에서 어떻게 복사 연산자와 할당 연산자를 정의할 수 있나요?</p> [23] 상속 — 엄마가 말해주지 않은 것들 <p style="padding-left: 30px;"> [23.1] 상위 클래스의 가상 함수가 아닌 함수에서 가상 함수를 호출하는 것은 괜찮나요? [23.2] 마지막 FAQ가 헷갈리네요. 이렇게 하는 것이 가상 함수를 사용하는 것과는 다른 전략아닌가요? 무슨 일이 벌어지고 있죠? [23.3] 가상함수를 사용할 때에는 public 가상 함수 대신에 protected 가상 함수를 사용해야 하나요? Updated! [23.4] 어떨 때에 순수 가상 함수를 사용해야 할까요? [23.5] 내 상위 클래스의 생성자에서 이 객체에 대한 가상 함수를 호출할 때, 왜 상속 받은 클라스의 가상 함수에 대한 오버라이드 부분이 호출되지 않나요? [23.6] 좋아요, 베이스 클래스의 생성자 안에서 이 객체에 대한 동적 바인딩이 일어나는 것과 같은 동작을 시뮬레이션 할 수 있는 방법이 있나요? [23.7] 소멸자에서 똑같은 문제가 생기네요: 베이스 클래스의 소멸자에서 호출한 내 객체의 가상함수가 상속받은 클래스에서는 오버라이드가 무시되는데, 도데체 무슨 일이 벌어지고 있는 건가요? [23.8] 베이스 클래스에서 가상으로 선언되지 않는 멤버함수를 상속 받은 클래스에서 반드시 재정의(오버라이드)해야 하나요? [23.9] 이 주의 메시지는 무엇인가요? 상속받은 클래스의 f(char) 함수가 상위 클래스의 f(double)을 감춘다. [23.10] "가상 테이블"이 풀리지 않는 외부요소라는 것이 무슨 뜻 인가요? [23.11] 어떻게 클래스를 만들어야 다른 클래스들이 상속할 수 없게 할 수 있나요? [23.12] 어떻게 내 멤버 함수를 만들어야 상속된 클래스 들에서 오버라이드 되지 않도록 할 수 있나요?</p> [24] 상속 — private 과 protected 상속 <p style="padding-left: 30px;"> [24.1] "private 상속"을 뭐라고 표현할 수 있나요? [24.2] "private 상속"과 "복합(composition)"이 유사한가요? [24.3] 어떤 것이 더 낫나요? private 상속과 복합을 비교하면? [24.4] private으로 상속받은 클래스로부터 베이스 클래스로 포인터 캐스팅을 해야 하나요? [24.5] private상속과 protected 상속은 어떤 관계가 있나요? [24.6] private과 protected 상속의 접근 규칙은 무엇인가요?</p> [25] 상속 — 다중상속, 가상 상속 <p style="padding-left: 30px;"> [25.1] 이번장은 어떻게 구성되어져 있나요? [25.2] 다중 상속은 사용하지 말라고 그러던데, 그 말이 맞나요? [25.3] 다중 상속이 나쁘지 않는 경우도 있나요? [25.4] 다중 상속을 사용하는 좋은 규칙은 무엇이 있나요? [25.5] 위의 가이드라인을 보여줄 수 있는 좋은 예제가 있나요? [25.6] 이런 손익을 잘 보여줄 수 있는 간단한 방법으론 뭐가 있을까요? [25.7] 위의 규칙을 보여줄 수 있는 다른 예에는 뭐가 있나요? [25.8] "공포의 다이아몬드(dreaded diamond)"란 무엇인가요? [25.9] 전체 구조도 중에서 어디에 가상 상속을 사용해야 하나요? [25.10] 가상 상속을 통해서 "자매 클래스 가리키기"란 무슨 뜻인가요? [25.11] 가상 상속을 사용할 때 반드시 알아야 할 특별한 고려사항은 무엇인가요? [25.12] 가상 상속을 사용하는 클래스로 부터 상속을 할 때 반드시 알아야 할 고려사항은 무엇인가요? [25.13] 가상 상속을 사용하는 클래스를 사용할 때 반드시 알아야 할 고려사항은 무엇인가요? [25.14] 한가지만 더: 다중 상속, 가상 상속의 경우에 생성자가 호출되는 정확한 순서는 무엇인가요? [25.15] 다중 상속, 가상 상속을 사용하는 경우에 소멸자가 호출되는 정확한 순서는 무엇인가요?</p> [26] 빌트인 / 본질적인 / 프리미티브 자료형 <p style="padding-left: 30px;"> [26.1] sizeof(char)가 환경에 따라서 2가 될 수 있나요? 예를 들어 더블 바이트 문자열과 같은 경우에. [26.2] sizeof의 단위는 무엇인가요? [26.3] 와, 어떤 하드웨어나 컴파일러는 멀티바이트 문자열을 지원하는데, 그렇다면 문자(character)와 char는 다를 수 도 있다고 이야기 하는 건가요? [26.4] 하지만 어떤 하드웨어는 char가 8비트가 넘기도 하나요? C++ 바이트가 8 비트를 넘는 것을 이야기 하진 않쵸? 그런가요? [26.5] 알겠어요. 어떤 하드웨어는 9비트짜리 바이트도 사용한다는 거죠? 16비트 바이트나 32비트 바이트는 없죠? 맞죠? [26.6] 아 헷갈려요. 그냥 바이트, 캐릭터, 문자열에 대한 일반적인 규칙을 알려주세요. [26.7] "POD형"이란 무엇인가요? [26.8] 비정적 내장형/내부형/기본형 변수를 초기화 할 때, "초기화 리스트(initialization list)"이나 할당을 사용해야 하나요? [26.9] 정적 내장형/내부형/기본형 변수를 초기화 할 때, "정적 초기화 순서 문제"에 대해서 고민해야 하나요? [26.10] 내장형/내부형/기본형을 오버로딩하는 연산자를 정의할 수 있나요? [26.11] 내장형/내부형/기본형의 배열을 제거할 때, 왜 delete [] a 대신에 delete a라고만 하면 안되나요? [26.12] 정수가 2의 배수라는 것을 반복문 없이도 알 수 있나요?</p> [27] 코딩 표준 <p style="padding-left: 30px;"> [27.1] 좋은 C++ 코딩 표준에는 어떤 것들이 있나요? [27.2] 코딩 표준이 필요한가요? 이 것들이 충분한가요? [27.3] C를 개발하던 경험을 바탕으로 우리 조직에서 코딩 표준을 정하는 것이 좋을까요? [27.4] 헤더에서 의 차이는 무엇인가요?</a> [27.5] 코드를 작성할 때 using namespace std를 사용해야 하나요? [27.6] 코드를 이해하기 힘들어지기 때문에 ?: 연산자를 사용하는 것이 안좋은가요? [27.7] 로컬 변수들을 선언할 때 함수의 중간에 해야하나요? 아니면 맨 위에 히야 하나요? [27.8] 소소파일은 어떻게 이름 짓는 것이 좋은가요? foo.cpp, foo.C 아니면 foo.cc? [27.9] 헤더파일은 어떻게이름 짓는게 좋은가요? foo.H, foo.hh 아니면 foo.hpp? [27.10] C++에 lint와 같은 가이드라인이 있나요? [27.11] 왜 사람들이 포인터 캐스트 혹은 레퍼런스 캐스트에 그렇게 걱정을 많이 하나요? [27.12] 어떤 것이 더 좋나요? that_look_like_this 혹은 thatLookLikeThis? [27.13] 코딩 표준의 다른 소스가 있나요? [27.14] 잘 쓰이지 않는 문법을 사용해야 하나요?</p> [28] 객체지향/C++ 배우기 <p style="padding-left: 30px;"> [28.1] 멘토링이랑 무엇인가요? [28.2] 객체 지향과 C++를 배우기 전에 C를 배워야 하나요? [28.3] 객체 지향과 C++를 배우기 전에 스몰토크를 배워야 하나요? [28.4] 책을 하나 사야 하나요? 여러 책을 사야 하나요? [28.5] C++의 윤리적인 면을 잘 설명한 추천 가이드는 무엇이 있나요? [28.6] C++의 합법적인 면을 잘 설명한 추천 가이드는 무엇이 있나요? [28.7] C++ 프로그래밍을 예제로 잘 설명한 추천 가이드는 무엇이 있나요? [28.8] 객체지향 C++와 연관이 있는 객체지향 책이 있나요?</p> [29] 초보자 질답 모음 <p style="padding-left: 30px;"> [29.1] "초보자 질답 모음"에서 어떤 내용을 다루나요? [29.2] 무엇부터 시작해야하죠? 좀 어려운 것 같은데, 제가 좀 멍청한가요? [29.3] void main()을 써여 하나요? int main()을 써야하나요? Updated! [29.4] f(void)를 사용해야 하나요? f()를 사용해야 하나요? [29.5] short / int / long 자료형을 선택할 때의 기준은 무엇인가요? [29.6] const 변수란 무엇인가요? 변할 수 없는 변수라니 좀 모순된 것 아닌가요? [29.7] 왜 #define 대신 const 변수를 사용해야 하나요? [29.8] 전처리기를 사용하는 것이 나쁘다는 뜻인가요? [29.9] "표준 라이브러리"란 무어신가요? 어떤 것이 포함되고 포함되지 않나요? [29.10] 코드를 어떻게 레이아웃하는 것이 좋을까요? 빈칸, 탭, 줄바꿈 등을 어떻게 사용해야 할까요? [29.11] 코드에 숫가 많은 것은 괜찮나요? [29.12] 숫자에 L, U, f라는 접미사를 붙이는 이유는 무엇인가요? [29.13] 엔드 연산자(&&) 와 합(||) 연산자는 이해가 가는데요? 낫(!) 연산자의 목적은 무엇인가요? [29.14] !(a < b) 이 것이 논리적으로 >= b인가요? [29.15] NaN가 뭔가요? [29.16] 부동 소수점이 부정확한 이유는 무엇인가요? 왜 0.43이라고 출력하지 않나요? [29.17] 왜 부동 소수점의 값의 비교가 제대로 되지 않나요? [29.18] x==y임에도 불구하고 왜 cos(x) != cos(y)인가요? (사인, 탄젠트 로그 등 모든 부동 소수점 연산의 결과가 다른데요?) Updated! [29.19] enum Color와 같은 인넘 타입은 무엇인가요? int인가요? [29.20] 만약 인넘 타임이 다른 타입과 다르다면, 어떤 것이 좋고 무슨 일들이 가능한가요? [29.21] 다른 초보자 가이드에는 어떤 것들이 있나요?</p> [30] 스몰토크 사용자를 위한 C++ 배우기 <p style="padding-left: 30px;"> [30.1] C++와 스몰토크의 차이점은 무엇인가요? [30.2] "정적 타이핑(static typing)"이란 무엇인가요? 이것이 어떤면에서 스몰토크와 유사하거나 다른가요? [30.3] "정적 타이핑(static typing)"과 "동적 타이핑(dynamic typing)"중에 어떤 것이 C++에 더 잘 맞나요? [30.4] C++에서는 어떻게 상속을 사용하며, 이것이 스몰트크랑 어떻게 차이가 있나요? [30.5] 스몰토크와 C++의 상속 사이에는 어떤 실질적인 차이점들이 있나요?</p> [31] 레퍼런스와 값의 의미 <p style="padding-left: 30px;"> [31.1] 값/레퍼런스의 의미상의 차이가 무엇인가요? C++에서는 어떤 것이 가장 좋나요? [31.2] "가상 데이터"란 무엇이며, 어떻게, 왜 C++에서 사용해야 하나요? [31.3] 가상 데이터와 동적 데이터 간의 차이는 무엇인가요? [31.4] 포인터를 이용해서 멤버 데이터 간에 메모리를 할당해야 합니까? 아니면 조합(composition)을 사용해야 합니까? [31.5] 멤버 객체에 메모리를 할당할 때 3개의 성능 값의 상대적인 비용은 무엇입니까? [31.6] "인라인 가상" 멤버 함수들은 인라인이 된것입니까? [31.7] 절대로 레퍼런스 구문은 사용해선 안되겠네요, 맞나요? [31.8] 레퍼런스 구문를 사용했더니 성능이 나빠진다면 앞으로 전 값으로 값 전달하기(return by value)를 사용해야 한단 말인가요?</p> [32] C와 C++섞어 사용하기 <p style="padding-left: 30px;"> [32.1] C와 C++를 혼합해서 사용할 때 알아야 할 점은 무엇입니까? [32.2] C++ 코드에 표준 C 헤더들을 포함시킬수 있나요? [32.3] C++ 코드에 시스템과는 상관없는 C 헤더파일을 포함시킬 수 있나요? [32.4] 내가 가진 C 헤더파일을 바꿔서 C++ 코드에서 쉽게 #include 할 수 있게 하려면 어떻게 해야 하나요? [32.5] C++ 코드에서 시스템과 상관없는 C함수 f(int, char, float)를 호출하려면 어떻게 해야 하나요? [32.6] C코드에서 호출할 수 있는 C++ 함수 f(int, char, float)를 만들려면 어떻게 해야 하나요? [32.7] C/C++ 함수를 C/C++함수에서 호출할 때, 링커에서 에러가 나나요? [32.8] C함수에게 혹은 C함수로부터 C++ 클래스 객체를 전달하고 전달받을 수 있나요? [32.9] 내 C함수에서 직접적으로 C++ 클래스의 데이터에 접근할 수 있나요? [32.10] C를 사용할 때와 비교해서 왜 C++을 사용하는 것이 기계적인 조작을 하는데 더 멀어진 것 같은 느낌이 드는 것일까요?</p> [33] 멤버함수를 가리키는 포인터 <p style="padding-left: 30px;"> [33.1] "멤버함수를 가리키는 포인터"가 "함수를 가리키는 포인터"와 다른가요? [33.2] 신호 처리기나, X 이벤트 콜백이나 쓰레드나 작업을 시작하는 시스템 호출에 "멤버함수를 가리키는 포인터"를 전달하려면 어떻게 해야하나요? [33.3] 인터럽트 서브스 루틴으로 멤버 함수를 사용하려고 할 때, 형이 맞지 않는다고 에러가 나는데, 이것은 왜 그런가요? [33.4] 왜 C++ 함수의 주소를 얻는 것이 이렇게 힘든가요? [33.5] 멤버 함수로의 포인터를 사용하는 멤버함수를 호출할 때 발생하는 문법 에러를 피하는 방법은 무엇이 있나요? [33.6] 멤버함수를 가르키는 포인터의 배열을 어떻게 만들고 사용하나요? [33.7] 멤버함수를 가르키는 포인터를 void*로 바꿀 수 있나요? [33.8] 함수를 가리키는 포인터를 void*로 바꿀 수 있나요? [33.9] 함수 포인터 같은 것이 필요한데, 좀 더 편리하고, 쓰레드에도 안전한 그런 것이 있나요? 아니면 다른 방법이 있나요? [33.10] 펑셔노이드(functionoid)란게 뭔가요? 이걸 왜 써야 하나요? [33.11] 일반 함수 호출보다 펑셔노이드를 더 빠르게 만들 수 있나요?</p> [34] 컨테이너 클래스 <p style="padding-left: 30px;"> [34.1] 왜 단순한 배열 대신에 컨테이너 클래스를 사용해야 하나요? [34.2] 펄처럼 생긴 연관 배열을 C++로 만들려면 어떻게 해야하나요? [34.3] std::vector가 항상 연속적이라고 장담할 수 있나요? Updated! [34.4] 서로 다른 형의 객체들을 어떻게 컨테이너에 넣을 수 있나요? [34.5] 링크드 리스트/헤시테이블 등으로 부터 어떻게 하면 요소를 추가/접근/제어 할 수 있나요?</p> [35] 템플릿 <p style="padding-left: 30px;"> [35.1] 템플릿에 담겨진 숨은 뜻은 무엇인가요? [35.2] "class template"의 문법/구문은 무엇인가요? [35.3] "function template"의 문법/구문은 무엇인가요? [35.4] 어떻게 명시적으로 어떤 버전의 함수 템플릿이 호출되어야 할지를 선택할 수 있나요? [35.5] "매계변수화된 형(Parameterized Type)"이란 무엇인가요? [35.6] "범용성(Genericity)"란 무엇인가요? [35.7] 내 템플릿 함수는 템플릿 형 T가 int혹은 std::string일때 특별한 동작을 하는데, T가 이렇게 형마다 다를 경우에 어떻게 이에 해당하는 코드를 작성할 수 있나요? [35.8] 응? foo나 bar를 사용하지 않는 템플릿 특수화의 예제를 보여주세요. [35.9] 내 템플릿하무에 있는 대부분의 코드는 다 비슷해요; 소스 코드를 중복시키지 않으면서도 템플릿 특수화를 할 수 있는 특별한 방법이 있나요? [35.10] 모든 이런 템플릿과 템플릿 특수화를 사용하면 프로그램을 느리게 할 것 같아요, 맞나요? [35.11] 템플릿은 오버로딩이 맞죠? [35.12] 왜 템플릿을 사용하면 구현부와 선언부를 분리해서 쓸 수 없나요? 구현부를 .cpp 파일에 넣고 싶은데 그렇게 되질 않네요. [35.13] 템플릿 함수들로 부터 링커 에러를 피하려면 어떻게 해야하나요? [35.14] C++ 키워드를 통해서 템플릿 링커 에러를 쉽게 파악하는 법은? Updated! [35.15] 템플릿 클래스들로 부터 링커 에러를 피하려면 어떻게 해야하나요? [35.16] 템플릿 프랜즈로 부터 링커 에러를 같는 이유는 무엇인가요? [35.17] 템플릿에서 에러날 때 쏟아지는 방대한 양의 알수 없는 에러 메시지들 어떻게 해석해야 할까요? [35.18] 템플릿을 상속받은 클래스에서 템플릿 상위 클래스로부터 상속받은 내부 형을 사용할 때 왜 에러가 나나요? [35.19] 템플릿을 상속받은 클래스에서 템플릿 상위 클래스로부터 상속받은 멤버를 사용할 때 왜 에러가 나나요? Updated! [35.20] 이전의 문제들이 드러나지 않고 나중에 문제가 발생할 수 있나요? 이렇게 함으로써 컴파일러가 인식하지 못하는 잘못된 코드가 만들어 질 수도 있나요? Updated!</p> [36] 직렬화와 비직렬화 <p style="padding-left: 30px;"> [36.1] 이 "직렬화(Serialization)"란게 도데체 뭔가요? [36.2] 직렬화를 하는데 가장 좋은 기법을 어떻게 선택할 수 있나요? [36.3] 직렬화를 할 때 사람이 읽기 좋은("텍스트")로 해야할지, 사람이 읽을 수 없는 ("바이너리")로 할지 어떻게 결정해야 하나요? [36.4] 숫자, 문자, 문자열 등의 단순한 형은 어떻게 직렬화/비직렬화할 수 있나요? [36.5] 정확히 어떻게 해야 사람이 읽을 수 있는 ("텍스트") 포맷으로 읽고 쓸 수 있나요? [36.6] 정확히 어떻게 해야 사람이 읽을 수 없는 ("바이너리") 포맷으로 읽고 쓸 수 있나요? [36.7] 상속 계층 구조에 속하지도, 다른 객체를 가리키는 포인터도 없는 객체는 어떻게 직렬화할 수 있나요? [36.8] 상속 계층 구조에 속하지만, 다른 객체에 대한 포인터는 가지고 있지 않는 객체는 어떻게 직렬화할 수 있나요? [36.9] 다른 객체로의 포인터를 포함하고 있지만, 이 포인터들이 순환이나 조인이 없는 나무 형태를 일 경우에는 어떻게 직렬화 할 수 있나요? [36.10] 다른 객체로의 포인터를 포함하고 있고, 이 포인터들이 순환이 없는 나무형태를 이루고 있지만, 아주 "사소한" 조인을 가질 때는 어떻게 직렬화 할 수 있나요? [36.11] 다른 객체에 대한 포인터를 포함하고 있고, 이러한 포인터들이 순환도 있고, 복잡하게 조인도 하고 있는 형태의 객체는 어떻게 직렬화 할 수 있나요? [36.12] 객체를 직렬화/비직렬화 할 때 반드시 따라야할 절차가 있나요? [36.13] 그래프, 트리, 노드, 사이클, 조인, 잎에 조인, 내부 노드에 조인 이것들이 다 무엇인가요?</p> [37] 클래스 라이브러리 <p style="padding-left: 30px;"> [37.1] “STL”이 무엇입니까? [37.2] "STL"은 어디에서 얻을 수 있습니까? [37.3] std::vector와 같은 STL 컨테이너 안에 넣은 Fred 객체 Fred* 는 어떻게 다시 찾을 수 있나요? [37.4] STL을 사용하는데 필요한 도움은 어디에서 얻을 수 있나요? [37.5] 동적으로 명시된(Dynamically Typed) C++ 클래스 라이브러리를 사용하고 있는지 어떻게 알 수 있나요? [37.6] NIHCL은 무엇인가요? 어디에서 이것을 얻을 수 있나요? [37.7] "Numerical Recipes"에 있는 코드를 다운로드 받을 수 있는 ftp사이트는 어디인가요? [37.8] 내 실행파일은 왜이렇게 큰가요? [37.9] C++ 클래스 라이브러리들에 대한 수많은 정보들은 어디에서 얻을 수 있나요?</p> [38] 컴파일러 의존성 <p style="padding-left: 30px;"> [38.1] 어디에서 공짜 C++ 컴파일러를 다운로드 받을 수 있나요? [38.2] MFC와 비주얼 C++에 관한 정보는 어디에서 얻을 수 있나요? [38.3] MFC에서 상태바에 문자열을 출력할려면 어떻게 해야하나요? [38.4] 실행 프로그램을 디컴파일해서 다시 C++ 소스코드로 만들려면 어떻게 해야하나요? [38.5] 볼랜드, IBM, 마이크로소프트, 선 등의 회사에서 만든 C++ 컴파일러에 대한 정보는 어디에서 찾아야 하나요? [38.6] C++과 Visual C++의 차이는 무엇인가요? [38.7] 컴파일러들은 할당된 배열안의 요소들의 번호를 기억하기 위해서 "over-allocation"을 사용하는데요, 컴파일러들은 이것을 어떻게 사용하나요? [38.8] 컴파일러들은 할당된 배열안의 요소들의 번호를 기억하기 위해서 "associative array"을 사용하는데요, 컴파일러들은 이것을 어떻게 사용하나요? [38.9] 만약 이름 맹글링(Mangling)이 표준화 된다면, 다른 컴파일러 회사가 만든 컴파일러끼리 코드를 링크 할 수 있나요? [38.10] GNU C++ (g++)를 사용하면 작은 프로그램인데 엄청난 크기의 실행파일이 만들어집니다. 왜 그런건가요? [38.11] yacc할 수 있는 C++ 문법이 있나요? [38.12] C++ 1.2? 2.0? 2.1? 3.0란 무엇인가요? [38.13] C++를 C로 변환하는 것이 가능한가요?</p> [39] 기타 기술적인 논의사항 <p style="padding-left: 30px;"> [39.1] 숫자를 std::string로 바꾸는 법 [39.2] std::string를 숫자로 변환하는 법 [39.2] 위의 함수들을 다른 형과 사용할 수 있게 템플릿으로 만들수 있나요? [39.3] if절을 가지고 있는 코드를 이용해서 매크로를 만들 때 반드시 처리해야 하는 것은 무엇인가요? [39.4] 매크로가 여러줄일 때 반드시 처리해야 할 것은 무엇인가요? [39.5] 두개의 토큰을 붙여야 할 필요가 있는 매크로에서 반드시 처리해야 할 것은 무엇인가요? [39.6] 왜 컴파일러가 내 헤더파일 #include "c:test.h"를 못찾나요? [39.7] C++에서는 반복문에서 스코핑(!)을 어떻게 하나요? [39.8] 왜 반환형에 다른 함수를 오버로드 할 수 없나요? [39.9] "지속성(Persisitence)"가 뭔가요? "지속적인 객체(persistent object)"란 무엇을 말하나요? [39.10] 클래스를 두 개 만들어서 둘이 서로에 대해 알도록 하고 싶은데 어떻게 해야하나요? [39.11] 멤버변수로 사용되는 객체에 대해서 미리 선언하기(Forward declaration)에 대해서 알아야 할 특별한 사항들은 무엇인가요? [39.12] 인라인 함수를 사용할 때 미리 선언하기(Forward declaration)에 대해서 알아야 할 특별한 사항들은 무엇인가요? [39.13] 왜 Std::vector안에다는 미리 선언한 클래스를 집어넣을 수 없나요? [39.14] 왜 사람들이 x = ++y + y++ 이런 식의 코딩이 나쁘다고 하나요? [39.15] "연속된 점들"에 이 왜 중요한가요?</p> [40] 기타 환경적인 논의사항 <p style="padding-left: 30px;"> [40.1] 내 클래스 정보를 HTML 문서로 만들수 있나요? C++에도 javadoc과 유사한 것이 있나요? [40.2] C++ 공백문제를 해결할 수 있는 TeX나 LaTeX 매크로가 있나요? [40.3] C++ 소스 코드를 프린터로 출력하기 좋은 형태로 만들어 주는 도구가 있습니까? [40.4] GNU emacs에 C++ 모드가 있나요? 어디서 얻을 수 있죠? [40.5] 운영체제에 관련한 질문은 어디에서 해야하나요? (BC++, Windows 등등) [40.6] 내가 작성한 DOS C++ 프로그램에서 “Sorry: floating point code not linked” 에러가 나는데 어떻게 해야하죠? [40.7] 왜 BC45 IDE가 실행되고 있지 않는 상태에도 BC++ 윈도우가 죽나요? </p>

COMMENTS