예제코드 template class StackImpl { /* ? ? ? ? ? */ StackImpl( size_t size = 0 ); ~StackImpl(); void swap( StackImpl& other ) throw(); T* v_; size_t vsize_; size_t vused_; private: // private and undefined: 복사가 허용되지 않음 StackImpl( const StackImpl& ); StackImpl& operator=( const StackImpl& ); }; template class Stack : private StackImpl { public: Stack( size_t size = 0 ); ~Stack(); Stack( const Stack& ..
책 정리/Exceptional C++ 검색 결과
경험 많은 개발자라도 상속을 남용 하는 경우가 많이 있다. 상속은 머리에 껌이 달라 붙는것 처럼 띄어내기가 참 어려운 구조이기 때문에, 필요할때만 사용 해야 한다. 자.. 예제코드를 봐보자. 코드 /*예제 1 */ template class MyList { public: bool Insert( const T&, size_t index ); T Access( size_t index ) const; size_t Size() const; private: T* buf_; size_t bufsize_; }; /*예제 1(a) */ template class MySet1 : private MyList { public: bool Add( const T& );// Insert() 호출 T Get( size_t inde..
디자인 패턴은 재사용 가능한 코드를 작성하기 위한 도구이다. 이번 항목에서 디자인 패턴을 알아 볼 수 있겠는가? 코드 class string; class Record; class PrimaryKey; class GenericTableAlgorithm { public: GenericTableAlgorithm( const string& table ); virtual ~GenericTableAlgorithm(); /*성공했을 경우 true를 리턴하며, 1. 물리적으로 테이블 레코드를 읽는다. 2. 수행해야 하는 열인지 판단하기 위해 Filter를 실행한다. 3. 수행하는 열의 목록이 완료되었을때 각 열에 대해 ProcessRow를 호출한다. */ bool Process(); private: /*열을 처리해야 ..
이번 항목은 객체지향 기술은 무엇이 있고, 어떻게 사용되어야 하는가? 에 대한 것이다. 두 가지 종류의 통신 세션을 가진 네트워킹 어플리케이션이 있고, 각 세션은 자신의 메세지 프로토콜을 가지며, 각 세션은 스스로가 전송을 담당한다고 보자. 그래서 코드를 짜면 아래와 같을 것 이다. /* Base 클래스 */ class BasicProtocol { public: BasicProtocol( ); virtual ~BasicProtocol( ); bool BasicMsgA( /* ... */ ); bool BasicMsgB( /* ... */ ); bool BasicMsgC( /* ... */ ); }; /* Derived 클래스 */ class protocol1 : public BasicProtocol { ..
이번 항목은 가상함수를 사용시, 주의해야 할 점을 설명하고 있다. 다음 코드를 보자. #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
최근댓글