항목 13 에선 StackImpl 이 protected 를 나타내어 private 상속을 통하여 Stack 을 구현했다면, 이번에는 /?????/ 이 부분이 public 인터페이스일 경우, HAS-A 관계를 이용하여 Stack 을 구현해 보자. 코드 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& operat..
Exceptional C++ 검색 결과
예제코드 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& ..
경험 많은 개발자라도 상속을 남용 하는 경우가 많이 있다. 상속은 머리에 껌이 달라 붙는것 처럼 띄어내기가 참 어려운 구조이기 때문에, 필요할때만 사용 해야 한다. 자.. 예제코드를 봐보자. 코드 /*예제 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..
이번 항목은 객체지향 기술은 무엇이 있고, 어떻게 사용되어야 하는가? 에 대한 것이다. 두 가지 종류의 통신 세션을 가진 네트워킹 어플리케이션이 있고, 각 세션은 자신의 메세지 프로토콜을 가지며, 각 세션은 스스로가 전송을 담당한다고 보자. 그래서 코드를 짜면 아래와 같을 것 이다. /* 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
최근댓글