목록Software Engineering/Programming (18)
Pure Software Engineer :)
C++은 개발자가 클래스에 직접 넣지 않더라도 자동으로 생성하는 함수들이 있다. 그것들은 바로 1. 복사 생성자(copy constructor) 2. 복사 대입 연산자(copy assignment operator) 3. 소멸자(destructor) 위의 3가지에 더하여, 어떠한 생성자도 선언되지 있지 않으면 다음도 생성한다. 4. 기본 생성자 위 1~4가지의 공통점은 모두 public 멤버라는 것과 inline 함수라는 것이다. 즉, 다음 두 코드 블럭은 동일하다. 1 class Empty {}; 1 2 3 4 5 6 7 8 9 class Empty { public: Empty () { ... } Empty (const Empty & rhs) { ... } ~Empty () { ... } Empty & ..
프로그램 실행중에 특정 값이나 조건이 성립하는지 확인하기 위해 ASSERT 매크로를 사용한다. 조건이 실패하게 되면 abort 같은 것을 통해 실행중인 프로그램이 즉시 종료하게 된다. (무조건 abort()가 아니라 컴파일러마다 다른 방법으로 종료하는지는 확실하지 않다. 확인이 필요함) 하지만 프로그램 실행중이 아니라, 컴파일 타임에 특정 조건이 성립하는지 확인할 수 있다면 미리 검사하는 것이 더 좋을 것이다. 이러한 방법을 compile time assertion 또는 static assertion 이라고 부른다. boost 라이브러리나, C++0x 에서부터는 static_assert 를 통해 지원하는 것 같지만, 이를 사용하지 않고도 다음과 같이 간단한 매크로를 정의하여 쉽게 사용할 수 있다. Col..
먼저 본 항목에 들어가기 앞서, C++은 자바와 닷넷과는 다르게 메모리를 직접 관리해야 한다. 수동으로!! 하지만 반대로 생각해보면 개발자가 메모리를 잘(?) 컨트롤 할수만 있다면, 가비지 컬렉터를 통해 메모리 관리에 신경쓰지 않아도 되는 언어와 달리 성능(시간, 공간) 향상을 누릴 수가 있다. C++의 메모리를 직접 관리하기 위해서는 C++에서 메모리 관리 루틴이 어떻게 동작하는지를 잘 알아둘 필요가 있으며, 그에 대한 내용을 이번항목에서 설명하고 있다. [항목49] new 처리자의 동작 원리를 제대로 이해하자 C++에서는 흔히 operator new 연산자를 통해 메모리 할당을 요청한다. 하지만 메모리 할당에 실패하였을 경우에는? 1 2 3 4 5 6 7 8 9 10 11 12 #include #in..
스콧 마이어스의 Effective C++ 3판을 읽으면서 조금씩 정리를 해 보고자 한다. 책은 대학교때 구입했던거같은데...벌써 한 4~5년은 된것 같다 ㅠㅠ 최근 책을 읽어보다가 C++ 에 대해 지금까지 전혀 예상치 못하고 넘어갔던 재미있는것들도 많이 보여 충격을 받았다. 책의 특성상 특별히 순서에 관계없이 읽어도 되므로...블로그 정리도 재미있었던 부분(?) 부터 조금씩 정리하겠다고 마음먹었다. 언제가 될지 모르지만 책에 있는 모든 항목들을 정리할 수 있는 그날까지 열심히 해보자.!!!!
RedBlackTree.h #ifndef REDBLACKTREE_H_ #define REDBLACKTREE_H_ #include #include typedef int ElementType; typedef struct tagRBTNode { struct tagRBTNode* Parent; struct tagRBTNode* Left; struct tagRBTNode* Right; enum { RED, BLACK } Color; ElementType Data; }RBTNode; void RBT_DestroyTree(RBTNode* Tree); RBTNode* RBT_CreateNode(ElementType NewData); void RBT_DestroyNode(RBTNode* Node); RBTNode* RB..
BinarySearchTree.h #ifndef BINARY_SEARCH_TREE_H_ #define BINARY_SEARCH_TREE_H_ #include #include typedef int ElementType; typedef struct tagBSTNode { struct tagBSTNode* Left; struct tagBSTNode* Right; ElementType Data; }BSTNode; BSTNode* CreateNode(ElementType NewData); void DestroyNode(BSTNode* Node); void DestroyTree(BSTNode* Tree); BSTNode* SearchNode(BSTNode* Tree, ElementType Target); BSTNo..
Adapter 패턴이란? - 서로 다른 두 개의 인터페이스 사이를 연결해 주는 패턴 전원의 비유 예제 프로그램 제공되고 있는 것 교류 100볼트 Banner 클래스 교환장치 어댑터 PrintBanner 클래스 필요한 것 직류 12볼트 Print 클래스 adapter.h #pragma once #include using namespace std; class Banner { private: string str; public: Banner(string str) { this->str = str; } void showWithParen(); void showWithAster(); }; class Print { public: virtual void printWeak() = 0; virtual void printStr..
Iterator 패턴이란? - 집합체의 요소를 통일된 방법으로, 순서대로 지정하면서 처리하는 패턴 이름 설명 Aggregate 집합체를 나타내는 인터페이스 Iterator 하나씩 나열하면서 검색을 실행하는 인터페이스 Book 책을 나타내는 클래스 BookShelf 서가를 나타내는 클래스 BookShelfIterator 서가를 검색하는 클래스 iterator.h #pragma once #include using namespace std; template class Iterator { public: virtual bool hasNext() = 0; virtual T* next() = 0; }; template class Aggregate { public: virtual Iterator* iterator() ..