본 내용은 "Exceptional C++ : C++ 프로그래머를 자극하는 47개의 재미있는 퍼즐·문제" 책에서 문제만 발취한것임을 미리 밝힙니다. 난이도 8 이다. 와우~ 제목 그대로 이런 컨테이너를 만들어 보라는 의도~ 힌트로는 클라이언트 코드에서는 어떻게 사용할지를 생각해 보면 된다고 한다. 문제 1. 어떻게 하면 다음과 같은 고정 길이 벡터(vector) 클래스의 복사 생성자와 복사 할당자를 가장 잘 구현할 수 있을까? 어떻게 하면 생성자와 할당자를 최대로 사용 할 수 있을까? 주의점 : 절대로 다른 것들을 고쳐서는 안된다. 오직 복사 생성자와 복사 할당자만을 구현하는것이다. 또한 STL 호환이 아니다! template class fixed_vector { public: typedef T* iter..
책 정리 검색 결과
다음 코드의 흐름제어(Control Flow)에 관련되어서 나올수 있는 많은 문제를 찾아보고, 어떻게 고쳐야 되는지 생각해 보자. #include #include #include #include using namespace std; /* 다음 라인은 다른 헤더 파일로부터 나온 것임*/ char* intoa( int value, char* workArea, int radix ); extern int fileIdCounter; /* 클래스가 변하지 않는가에 대한 검사를 자동으로 하는 보조 함수 */ template inline void AAssert( T& p ) { static int localFileId = ++fileIdCounter; if( !p.Invariant() ) { cerr
포워딩 함수가 무엇이며, 어떻게 효율적으로 구사할수 있는지에 대해서 이야기이다. 포워딩 함수란, 다른 개체나 함수등으로 일을 떠넘기는 함수를 뜻하며, 개념적으로 switch 함수라고 보면 될 것이다. 포워딩 함수의 예 bool f( X x ) { return g( x ); } 문제 : 어떻게 하면 효율적으로 바꿀 수 있을까? ... .. . 1. 값을 매개변수로 넘기는 대신 const&를 매개변수로 넘기자. 이렇게 되면 불필요한 복사생성자 호출이 없어 지므로, 효율적으로 포워딩 함수를 구성 할 수가 있다. 여기에 대해서 몇가지 부수적으로 이야기가 붙여지는데, x는 f() 에서 사용되어지지 않고 g의 매개변수로써만 사용되기 때문에, 컴파일러 단계에서 최적화 시켜, 복사 생성자 호출을 제거 할수 있다. 그러..
이번 장은 주제 부터 말하는게 좋겠다. 내장 형식 중에 하나인 bool이 정말로 필요한지? 아니면 현재 존재하는 언어에서 제공하는 기능을 통하여 표현할 수 있는지? 에 대해서 나열해 놓은 것이다. 문제 wchar_t(C에서 typedef)에서 비롯해서, bool은 단지 ARM(Ellis90 : C++ Reference Manual)에서부터 C++에 추가된 내장 형식이다. bool이 처리할 수 있는 것들은 기존 언어에서 내장 형식의 추가 없이 표현할수 있는가? 만약 할수 있다면 동일하게 동작하는 구현에 대해서 작성해보고, 표현할수 없다면, bool 내장 형식을 왜 표현못하는지 설명을 할수 있는 방법을 나열해 보거라. .... ... .. . 해설 구현 할 수 없다. ture 와 false를 사용하는 boo..
표준 C++에 있는 새로운 스타일의 캐스트가 예전 스타일의 캐스트 보다 강력하고 안전하다. 이에 대해서 알마나 잘 알고 있냐? 가 이번 항목의 주제 이다. class A { public: virtual _A(); /* ... */ }; class B : private virtual A { /* ... */ }; class C : public ASSERT() { /* ... */ }; class D : public B, public C { /* ... */ }; int main( void ) { A a1; B b1; C c1; D d1; const A a2; const A& ra1 = a1; const A& ra2 = a2; char C; return 0; } 여기에 네 개의 문제를 찾아보고 해결하자. 문..
MSVC2005 에서 warring 뜨지만 컴파일 되는 것을 확인 하고 코드 제시한다. #include struct Point { int x, y; Point( int tpx, int tpy ) : x(tpx), y(tpy) { } }; class Polygon { public: void AddPoint( const Point pt ) { InvalidateArea(); points_.push_back( pt ); } Point GetPoint ( const int i ) { return points_[i]; } int GetNumPoints( void ) { return points_.size(); } double GetArea( void ) { if( area_ < 0 ) // 아직 계산되지 않았거나..
최근댓글