이번 장은 주제 부터 말하는게 좋겠다. 내장 형식 중에 하나인 bool이 정말로 필요한지? 아니면 현재 존재하는 언어에서 제공하는 기능을 통하여 표현할 수 있는지? 에 대해서 나열해 놓은 것이다. 문제 wchar_t(C에서 typedef)에서 비롯해서, bool은 단지 ARM(Ellis90 : C++ Reference Manual)에서부터 C++에 추가된 내장 형식이다. bool이 처리할 수 있는 것들은 기존 언어에서 내장 형식의 추가 없이 표현할수 있는가? 만약 할수 있다면 동일하게 동작하는 구현에 대해서 작성해보고, 표현할수 없다면, bool 내장 형식을 왜 표현못하는지 설명을 할수 있는 방법을 나열해 보거라. .... ... .. . 해설 구현 할 수 없다. ture 와 false를 사용하는 boo..
Exceptional C++ 검색 결과
표준 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 ) // 아직 계산되지 않았거나..
다음에 나오는 코드들은 무엇이 다를까요?(T는 어떤 클래스 형식을 의미합니다)? T t; T t(); T t(u); T t = u; 5분안에 답하지 못한다면, 모르는 것이므로... 정리를 시작할까 한다. 해당 코드는 T 클래스의 1. 기본 생성자로 인한 초기화(기본 초기화) 2. 인자가 있는 생성자로 인한 초기화(직접 초기화) 3. 복사 생성자로 인한 초기화(복사 초기화) 의 차이를 말하고 있다. 1. T t; 해당 코드는, 기본 생성자로 인한 초기화를 뜻하며, 그 어떠한 생성자가 없거나, T::T() 가 있다면, T::T() 로 초기화를 하는 코드이다. 2. T t(); 나도 이 코드는 T::T() 의 호출이다. 라고 단정 지었다.(이렇게 사용한적이 없어서..) 하지만 이 코드는 .. T 타입을 반환하..
본 내용은 "Exceptional C++ : C++ 프로그래머를 자극하는 47개의 재미있는 퍼즐·문제" 책에서 문제만 발취한것임을 미리 밝힙니다. 문제 1. char_traits에서 ci_char_traits를 상속 받는 방식이 안전한가? 2. 왜 다음과 같은 코드가 컴파일에 실패했나? // 이 코드는 항목 2의 해결책으로 나온 코드 기반의 코드이다. ci_string s = "abc"; std::cout
본 내용은 "Exceptional C++ : C++ 프로그래머를 자극하는 47개의 재미있는 퍼즐·문제" 책에서 문제만 발취한것임을 미리 밝힙니다. 문제 1. "대 · 소문자 구분 없는" 것이 무슨 뜻인가? 2. 표준 std::string 클래스와 동일하지만, 확장된 stricmp()처럼 일반적인 방법으로 대 · 소문자 구분 없는 ci_string 클래스를 작성해 보라 사용법으로는 class ci_string; ci_string s( "abCdE"); // 대 소문자를 구분하지 않는 비교 assert( s == "abcde" ); assert( s == "ABCDE" ); // 대소문자를 구분하는 비교 assert( strcmp( s.c_str(), "abCde") == 0 ); assert( strcmp..
최근댓글