이번 항목은 객체지향 기술은 무엇이 있고, 어떻게 사용되어야 하는가? 에 대한 것이다. 두 가지 종류의 통신 세션을 가진 네트워킹 어플리케이션이 있고, 각 세션은 자신의 메세지 프로토콜을 가지며, 각 세션은 스스로가 전송을 담당한다고 보자. 그래서 코드를 짜면 아래와 같을 것 이다. /* Base 클래스 */ class BasicProtocol { public: BasicProtocol( ); virtual ~BasicProtocol( ); bool BasicMsgA( /* ... */ ); bool BasicMsgB( /* ... */ ); bool BasicMsgC( /* ... */ ); }; /* Derived 클래스 */ class protocol1 : public BasicProtocol { ..
2008/10 검색 결과
이번 항목은 가상함수를 사용시, 주의해야 할 점을 설명하고 있다. 다음 코드를 보자. #include #include using namespace std; /*Base 클래스의 정의 구역*/ class Base { public: virtual void f( int ); virtual void f( double ); virtual void g( int i = 10 ); }; void Base::f( int ) { cout
이번 항목은 보다 전문가적 스타일에 중점을 두었으며, 이 원리를 이해 한다면, 더 유지보수가 편하고 견고한 클래스 디자인에 도움이 될 것이다. 다음 코드를 보자. // 예제코드 class Complex { public: Complex( double real, double imaginary = 0 ) : _real( real ), _imaginary( imaginary ) { } void operator+ ( Complex other ) { _real = _real + other._real; _imaginary = _real + other._imaginary; } void operator
Pimpl 의 주요 단점은 항당 new 를 이용하여, 생성하고 delete를 이용하여 해제하는 과정을 겪어야 한다는 점이다. 보다 안전하고 보다 빠르게 사용 할수 있을까? ... 아래 3가지 시도를 우선 보도록 하자. /* 시도 1 */ // file y.h #include "x.h" class Y { /* ... */ X x_; }; // file y.cpp Y::Y() { } 역시 이 시도1로 하면 Pimpl의 비용을 전혀 내지 않지만, Pimpl 은 쓰지 않으니 .. 한번 사용해 보도록 하자. /* 시도 2 */ // file y.h class X; class Y { /* ... */ X* px_; }; // file y.cpp #include "x.h" Y::Y() : px_( new X ) { ..
이 포스트를 만득 목적 기록해 두었다가, 필요할 때 보려고 이 포스트의 준비 상황 PC에 Windows가 설치되어 있어야 한다. 실행 창이 무엇인지 알아야 한다. 내용 작업하다가 윈도우가 업데이트 되면, 가끔 재시작 하라고 한다. 그런데 작업중이니, 몹시 불편하다. 그래서 이 재시작하라는 것만 끄니, 조용하다. 어떻게 재시작 팝업창을 방지 할 수 있는가? 윈도우의 시작 버튼을 누른다. 실행 버튼을 누른다. cmd 를 입력하고 엔터 를 친다. net stop wuauserv 치고 엔터를 친다. 이제 팝업창에 대해서 모라 말하는게 보이지 않을 것이다. - 컴퓨터를 껏다가 키면, 자동으로 다시 활성화 되므로, 더 이상 신경 쓸꺼 없다. 주의해야 할 것이 있는가? 윈도우 비스타 이상에선 관리자 모드로 실행해야 ..
항목 27에서 Pimpl 이디엄을 사용하여, 컴파일 타임 상호 의존성을 매우 줄였다. 하지만 Pimpl 을 어떻게 짜야만 더 좋고 안전하게 만들 수 있는지에 대해서는 무시하고 진행 했었다. 그런데.. 생뚱맞게 왜 항목이 "컴파일 방화벽" 이라는 말이 나왔지? 곰곰해 생각해 보면 Pimpl 이디엄은 그 컴파일러 입장에서 보면, 보이지 않는 벽같은 것이라 할 수도 있겠다. 음~ 본론으로 들어와서, 어떻게 만드는 것이 가장 좋을까? 크게 몇가지 규칙을 적어 본다. 모든 private 데이터를 XImpl에 넣는다.(함수는 제외) 모든 private 멤버들을 XImpl에 넣는다. 모든 Private와 Protected 멤버들을 XImpl 에 넣는다. XImpl을 전체적으로 X가 가지고 있는 클래스로 만들고, X를..
최근댓글