파트 1에서 불 필요한 헤더를 제거하고 수정했다면, 파트2에선 기본 하는 일을 제외하고, 컴파일 의존성을 좀 주려 보자. 예제 코드 /* x.h : 원본 헤더 */ // #include 없어도 됨 // #include #include // 포워드 헤더 포함 #include #include "a.h" #include "b.h" #include "c.h" #include "d.h" // #include "e.h" class X : public A, private B { public: X( const C& ); B f( int, char* ); C f( int, C ); C& g( B ); class E; // 포워드 선언 사용 E h( E ); virtual std::ostream& print( std::o..
책 정리 검색 결과
컴파일 시간을 줄이기 위한 그 첫번째 단계는 "불필요한 헤더 파일을 제거해야 한다" 부터 시작 된다. 왜냐하면 많은 헤더파일 포함은 그에 비례한 시간을 컴파일러에게 주어야 하기 때문이다. 그렇다면, 어떤 헤더 파일을 제거해도 되는지 아래 코드를 보자. /* x.h : 원본 헤더 */ #include #include #include /* A, B, C, D 혹은 E 모두 템플릿이 아니다. 단지 A와 C만 가상 함수들을 가지고 있다. */ #include "a.h" #include "b.h" #include "c.h" #include "d.h" #include "e.h" class X : public A, private B { public: X( const C& ); B f( int, char* ); C f..
다음 문제의 미묘한 문제를 지적해보자. ① 이름 은폐(name hiding)는 무엇인가? 파생된 클래스에서 기반 클래스 이름의 가시성에 어떻게 영향을 주는지 밝혀라 ② 다음 예제가 정확하게 컴파일 되는가? 가능한 좋은 답변을 달아보고, 의심 되는 부분을 고립시킨 후 설명해 봐라. namespace N { class C { /* 어쩌구 저쩌구 */ }; } int operator+( int i, N::C ) { return i + 1; } #include int main( void ) { N::C a[10]; std::accumulate( a, a+10, 0 ); } 분석 ① 가상 함수가 아니면 이름을 절대 가리지 말라고, Effective C++ 에서 설명하고 있었고, 역시 이 부분에 대해서 자세히 언급..
클래스 디자인 문제인 operator
이번엔 클래스에 대하여 알아 보는 항목이다. 클래스란? "클래스는 연관되어진 데이터와 데이터 처리 함수들의 모음을 정의한 것이다" 이제 질문의 시간을 갖어 보자. ① 어떤 함수들이 클래스의 "일부"일까? 그리고 ② 클래스의 인터페이스는 무엇으로 만들어 졌을까? 힌트 확실히 non-static 멤버 함수들은 단단히 클래스와 연결되어 졌다. 그렇다면 static 멤버 함수들은과 자유(free) 함수들의 경우는 어떠한가? 항목 31의 함축적 의미를 시간을 두어 생각해 보자. 분석 ①,② 이 두 질문들의 대답을 좀더 심화 시켜 본다면, 이 대답이 C 형식의 개체지향 프로그래밍에 어떻게 적용 될까? C++의 Koening 검색이 어떻게 적용될까?, Myers 예는? 클래스 의존성을 분석하고 개체 모델을 디자인하는..
최근댓글