분류 전체보기
-
Copy Constructor vs Assignment operatorC++ 2014. 2. 12. 23:22
유사해 보이지만 의외로 이를 구분하는 방법은 쉽다. 하나는 constructor 이고 Asssignment는 operator이다. 즉 Copy는 객체가 없는 상태에서 새로 객체가 생성이 되는 것이고 Assignment는 이미 있는 객체에 다른 객체의 무엇을 복사해주는 것이다. class First { private: int ma; public: First(void); First(int x); ~First(void); First& operator = (const First& rhs); const int getA() ; }; class Second : public First { private: int mb; public: Second(void); Second(int i); const int getB(); ~..
-
Constructor 와 메모리C++ 2014. 2. 12. 01:41
Constructor는 Heap과 Stack 두 가지 메모리에 생성이 가능하다. Stack 에 생성이 되는 경우 Constructor를 Variable 선언하는 방법으로 생성을 하는 방법 객체가 생성이 될 때 Stack 에 생성이 될 때는 객체가 소멸할 때 다른 변수와 함께 소멸이 되므로 delete 할 필요가 없다. Object obj(3); Object obj2; // ******* 주의할 점 Object obj(); 컴파일도 되서 문제없이 보이지만 이건 객체 생성이 구분이 아니라 obj() 라는 function을 부르는 구문이다. Heap에 생성이 되는 경우 New를 사용하여 동적으로 객체를 생성하는 방법 Object obj = new Object(); Object obj2 = new Object(..
-
Header file에서 #ifndef카테고리 없음 2014. 1. 23. 00:47
Compiler에 따라 Error가 나는 경우도 있고 그렇지 않은 경우도 있지만 중복 헤더를 방지하기 위해 습관처럼 사용하자. // 헤더 파일의 제일 첫 부분 #ifndef HDR_H // 헤더 파일명을 대문자한 매크로가 정의되어 있지 않으면 #define HDR_H // 헤더 파일명 매크로를 정의한다 ...... // 헤더 파일 본 내용이 여기 들어갑니다 #endif // ifndef HDR_H 에 매치됩니다 위와 같이 헤더 파일은 처음 헤더 파일이 포함될 때, 컴파일러의 프리프로세서가 HDR_H 매크로가 정의되어 있지 않으므로 HDR_H 매크로를 정의하게 됩니다. 다음에 다시 같은 헤더 파일이 포함될 때는 HDR_H이 정의되어 있기 때문에 모든 헤더 파일의 내용을 스킵하게 됩니다. 즉, 포함되지 않는..
-
Cast 연산자C++ 2014. 1. 22. 02:31
const 캐스팅 포인터 또는 참조형의 상수(const)성을 제거하는데 사용한다. 다른 용도로 사용하지 못하며 다른 캐스트 연산자는 상수성을 제거할 수 없다. 당연한 말이지만 설계에서 이것을 사용하는 것은 바람직하지 못하며 해당 프로그램 전체가 const를 유지하도록 설계하도록 해야 한다. 그러나 다른 라이브러리를 사용해야 하는 경우 부득히 사용하여야만 할 때 사용한다. const int* pConstInt = new int( 10 ); // int* pInt 에 상수화가 제거된 int* pConstInt 대입 int* pInt = const_cast( pConstInt );static_cast C style의 Type Casting 사용 제한사항 - 실수형과 정수형, 정수형과 열거형등의 기본데이터 타입..
-
has-a 설계 방법카테고리 없음 2014. 1. 21. 22:26
상속관계 (Has-a) A가 B를 가진다고 할때 A가 B를 상속하여서 B의 public method를 통해서 접근을 하는 방법이다. 틀린 것은 아니나 상속관계의 강한 Coupling으로 A/B Class의 변경사항이 있을 때 Class 전체를 다시 설계해야 하는 문제가 있다. Composition (Containment) 타 클래스 객체를 멤버로 갖는 클래스를 만든다. (일반적으로 가지게 되는 객체는 private 멤버이다.) 이렇게 하면 외부에서는 내부에 포함된 클래스 멤버의 메소드에 접근이 불가능하며, A가 B를 가진다고 할때, B의 메소드에 접근하려면, A의 public 메소드를 통해서만 접근이 가능하다. class CB { private: ... public: void funcB(); }; cla..
-
Container의 선택카테고리 없음 2014. 1. 19. 05:28
가장 이상적인 컨테이너는 Array이다. 사이즈를 알수 있고 별다른 조건이 필요없다면 가장 효율적이고 빠르다. 그 다음은 Vector인데 원소의 수의 변화가 많지 않고 그 변화를 예측할 수가 있다면 사용하는 것이 좋다. 특히 reserve 기능은 vector 의 특징이고 이를 효율적으로 사용한다면 어떤 컨테이너보다 횽ㄹ적이다. 원소의 추가 삭제가 자주 일어나는 경우에는 list가 좋다. List는 임의의 원소의 추가 삭제에 최적화되어있다. 만일 원소 추가 삭제가 전/후 추가 삭제만 자주 일어난다면 dequeue 가 효율적이다. 원소/추가 삭제가 시퀀스의 맨뒤에서 일어난다면 vector가 장 가볍다. 원소의 정렬이 필요하면 Set을 사용한다. 원소의 정렬도 필요하고 같은 데이타도 넣으려면 multiset을..
-
Polymorphism, Virtual, Dynamic Biding카테고리 없음 2014. 1. 17. 23:59
Polymophism의 개념 상속관계에 있는 Class에서 (A