얼마나 private이 비공개적인가? 라는 질문을 보고, 어떤 관점에서 비공개적인지 궁금해 했다. 컴파일 타임의 비공개적인가를 뜻하는건지, 런타임의 비공개적인가를 뜻하는지에 대해서 생각을 했었다. 책에선 이 두가지를 통틀어 그 원리에 대해서 설명 하고 있는데, 다음 질문을 통해서, 알아 보도록 하자. 1 ) Twice 함수들이 링크 과정에 포함되는 다른 어떤 번역 단위에 정의되어 있다고 할 때, 다음의 C++ 프로그램이 제대로 컴파일, 실행 될까? 아니라면 왜 그럴까? 된다면, 무엇이 출력 될까? 예제 코드 // Twice(x) 는 2 * x를 돌려준다. class Calc { public: double Twice( double d ); private: int Twice( int i ); std::com..
Exceptional C++ Style 검색 결과
이번 항목에선 클래스의 접근 권한에 대한 이야기이며, 이런 권한이란 전제가 깔리기 때문에 "위조범, 사기꾼, 소매치기, 도둑"이 생기고, 이들을 찾고 검거하는 방법들도 소개 된다. 1 ) 클래스의 다음 부분들에는 어떤 코드가 접근할 수 있는가? ( a ) public ( b ) protected ( c ) private 나는 이 질문에 답하기 위해서, 먼저, "어디에서 접근 할 때의 접근 권한이지?" 라는 생각이 들었다. 상속된 클래스 내부에서의 접근 권한인가? 클래스의 객체의 사용 접근 권한인가? 로 나뉘는데, .. 불필요한 생각 없이, 그냥 해 보자. a. public 공개 멤버를 정할 때 쓰는 키워드로, 어떠한 경우에도 접근할 수 있다. b. protected 1단 보호가 걸친 멤버를 정할 때 쓰는..
이 항목에선 Jan Chrisiaan van Winkel 이라는 학생이 제공한 예제에서 어떤 실수가 있는지 살펴본다. 1 ) 다음 소스를 보고, 어디가 문제인지 지적해보라. #include using namespace std; class A { public: A( const string s ) { /* ... */ } string f() { return "hello, world"; } }; class B : public A { public: B() : A( s = f() ) { } private: string s; }; int main( void ) { B b; return 0; } 난 이 문제를 보고, 재석이와 함께 고민했었다. 어느 부분이 문제일거 같다는 느낌(?)이 들었지만, 정확하게 지적하지 못했..
예외 명세가 가치가 있는가? 이 질문을 전제로 생각한다면, .. 많은 생각들을 할 수 있을 것이다. 1 ) 예외 명세를 위반하면 어떤 일이 생길까? C++ 기능에 깔린 기본적인 근거를 논하라. 내가 알고 있는 것은 예외 명세를 위반시키면, unexpected 핸들러가 호출 되어지게 된다. 인데, MSVC2005 에서 테스트를 해봐도 작동 되지 않는다. 테스트 코드 #include class A { public: void Darw() throw( int ) { throw A(); } }; void f() { std::cout f(); return 0; } 4 ) 예외 명세는 무엇이고, 하는 일은 무엇인가? 엄밀하게 서술하라. 예외 명세는 "무슨 무슨 예외를 던지겠다" 라고 정하는 것이고, 하는 일은, "지..
예외 안전성을 추구할 가치가 있는가? 어떻게 이런 질문을 할 수 있을까 한다. "추구할 가치가 있는가?" .. 나는 단연코 추구할 가치가 있다고 생각한다. 여러가지가 있지만, 에러가 한번 터졌다 하면, 어디서 부터 봐야 하는지 난감할 때, 이 때문에 나는 단연코 추구해야 한다고 생각한다. 어느정도 알고 있을 때의 코딩과 그냥 막무가네로 찾아야 하는 코딩은 분명 차이가 있기 때문이다. 이번 항목은 "추구할 가치가 있는가?" 로 생각하는 논쟁에 대해서 정리하는 항목이라 할 수 있겠다. 1 ) Abrahams의 예외 안전성 보장들을 강략히 정의하라. 기본 보장(basic guarantee) : 자원 누수는 일어나지 않으며, 연산 실패된 객체의 파괴가 가능하다는 보장, : 쉽게 말해서 RAII 를 들 수 있겠다..
제일 싫어하는 try 와 catch 이다. 사용해 본적이 별로 없어서인지 친근하지 않을 뿐더로, 알아야 할 것이 산떠미 처럼 쌓여(.. C++ 이 원래 그렇지만 )있으니, 손 댈 때도 조심해야 할 것이다. 1 ) try 블록 이란? 코드를 보자. #include #include int main( void ) { bool some_condition = true; bool some_other_condition = true; try { if( some_condition ) { throw std::string( "this is a string" ); } else if( some_other_condition ) { throw 42; } } catch( const std::string& rError ) { // s..
최근댓글