본문 바로가기

번역/Bjarne Stroustrup's C++ Style and Technique FAQ27

Why are member functions not virtual by default? 왜 멤버함수는 기본적으로 virtual이 아닌가요? 왜냐하면 많은 클래스가 기본 클래스(부모 클래스)로 사용하기위해 디자인되지 않기 때문입니다.예를 들자면, 복소수 클래스를 보세요 또한, 가상함수가 포함된 클래스의 객체들은 가상함수 호출 메커니즘때문에 별도의 공간이 필요한데, 적형적으로 객체당 1 워드정도가 필요합니다. 이 오버헤드는 중요할 수 있고, 다른 언어(예를들면C 혹은 포트란)의 데이터에 대한 레이아웃 호환성의 걸림돌이 될 수 있습니다. 디자인의 이론적 해석을 더 알고싶으면 Design and Evolution of C++을 참고하세요. 2019. 2. 26.
Why do I have to put the data in my class declarations? 왜 클래스 선언에 데이터를 넣어야 하나요? 그렇게 하지 마세요. 만약에 인터페이스에 데이터를 원치 않을경우, 인터페이스를 정의한 클래스에 넣지마세요. 그 대신 파생 클래스에 넣으세요. "Why do my compiles take so long?"를 참고하세요. 가끔 클래스에 데이터를 표현하고 싶을 때가 있습니다.complex (복소수?) 클래스를 고려해봅시다: template class complex {public:complex() : re(0), im(0) { }complex(Scalar r) : re(r), im(0) { }complex(Scalar r, Scalar i) : re(r), im(i) { }// ... complex& operator+=(const complex& a){ re+=a.re.. 2019. 1. 31.
Why do my compiles take so long? 왜 컴파일이 오래걸릴까요? 컴파일러 문제일 수 있는데, 컴파일러가 옛날 버전이거나 설치가 잘못되었거나, 또 컴퓨터가 구식이어서 일 수 있습니다. 이런 문제는 제가 도와드릴순 없습니다. 하지만, 컴파일 하려는 프로그램의 설계가 형편없어서 컴파일러가 컴파일할 때 수백개의 헤더파일과 수만라인의 코드를 검사해야하는 경우도 있습니다. 원칙적으로는 이런 문제는 피할 수 있습니다. 만약 이 문제가 사용중이신 라이브러리 공급업체의 설계에 있다면 할 수 있는것이 거의 없습니다 (라이브러리나 공급업체를 변경하는 것을 제외하곤), 하지만 수정 후 재컴파일을 최소화하기 위해 코드의 구조를 바꿀 수 있습니다. 재컴파일을 최소하 하는 디자인은 전형적으로 더 나은, 더 유지보수에 유용하며, 관계의 분리에 더 좋은 모습을 보여주기 .. 2019. 1. 15.
Why doesn't my constructor work right? 왜 제 생성자가 제대로 동작하지 않죠? 이 질문은 다음과 같은 많은 질문에서 뽑혔습니다 :- 왜 컴파일러가 제가 원하지도 않을때 제 객체를 복사하나요?- 어떻게 복사를 막을 수 있나요?- 어떻게 암묵적 변환을 막을 수 있나요?- 어떻게 제 int 값을 복소수 값으로 바꾸나요? 기본적으로 클래스는 모든 요소를 복사하는 복사 생성자와 복사 할당을 제공합니다.예시: struct Point {int x,y;Point(int xx = 0, int yy = 0) :x(xx), y(yy) { }}; Point p1(1,2);Point p2 = p1; 여기에 p2.x==p1.x and p2.y==p1.y 부분이 있습니다. 이런게 종종 정확히 여러분들이 원하던 것이겠지만 (그리고 C의 호환성을 위해 필수인 것), 다음도.. 2019. 1. 15.