이번 항목에선 암묵적으로 생성되는 함수들 때문에 생길 수 있는 문제점들을 짚어 보고, 문제점을 없애기 위해서 어떻게 해야 하는지에 대해서 배워 본다. 1 ) 클래스 정의 할 때, 암묵적으로 생성되는 함수들은 무엇이 있으며, 이 함수들을 암묵적으로 생성하는 것에 대한 의미와 암묵적인 함수들 때문에 생길 수 있는 문제점들을 구체적으로 설명하라. 암묵적으로 생성 되는 함수들은 무엇이 있는가? a. 기본 생성자 b. 복사 생성자 c. 복사 배정 연산자 d. 소멸자 언제 암묵적으로 생성 될까? 각 암묵적으로 생성되는 함수들을 정의하지 않은 상태에서, 각 함수들을 호출하는 코드를 작성하게 되면, 컴파일러가 각 함수들을 만들어 준다. 예외적으로, 생성자를 단 1개라도 정의하면, 생성자에 대해선 만들어 주지 않고, 복..
c++ 검색 결과
이번 항목에선 C++ 프로그래밍에서 사용되는 캡슐화(encapsulation)에 대한 이야기들이다. 철학적인 이야기도 나오기 때문에, 보는 중간에 졸음까지 잤었지만, 자다가 일어나서 다시 읽을 때의 신선함 때문이라도, 꽤 재미있는 항목이라 나는 생각한다. 스타일데로 캡슐화에 대한 질문들을 시작해 보자,. 1 ) "캡슐화"가 뜻하는 바는 무엇이며, 객체지향적 설계와 프로그래밍에서 그것이 얼마나 중요한가? 책에선 "캡슐화" 라는 뜻부터 풀어 보는데, 캡슐화란 "내부 구현을 숨기고 감싸서 보호하는 것" 이다. 즉, 외부와 연결된 인터페이스가 내부에 의존하지 않는다면, 클래스 내부의 변화는 외부와 연결된 인터페이스에 영향을 미치지 않음으로써, 보호 되는 것이다. 그렇다면, 객체지향적 설계와 프로그래밍에서 그것이..
얼마나 private이 비공개적인가? 라는 질문을 보고, 어떤 관점에서 비공개적인지 궁금해 했다. 컴파일 타임의 비공개적인가를 뜻하는건지, 런타임의 비공개적인가를 뜻하는지에 대해서 생각을 했었다. 책에선 이 두가지를 통틀어 그 원리에 대해서 설명 하고 있는데, 다음 질문을 통해서, 알아 보도록 하자. 1 ) Twice 함수들이 링크 과정에 포함되는 다른 어떤 번역 단위에 정의되어 있다고 할 때, 다음의 C++ 프로그램이 제대로 컴파일, 실행 될까? 아니라면 왜 그럴까? 된다면, 무엇이 출력 될까? 예제 코드 // Twice(x) 는 2 * x를 돌려준다. class Calc { public: double Twice( double d ); private: int Twice( int i ); std::com..
이 항목에선 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 를 들 수 있겠다..
최근댓글