분류 전체보기
-
Vector constructor and descructorC++ 2014. 2. 17. 12:35
Vector의 element 갯수 지정하는 constructor vector double_vector(10); 이미 생성이 된 vector는 array operator []를 사용하여 접근 가능 double_vector[5]; double_vector.at(5); 위의 두개는 같은 의미이나 operator[]를 사용하는 경우에는 out of range에 대한 exception 처리가 없다. Resize() 함수를 이용하여 size를 변경할 수 있다. element 갯수 지정하고 initializtion까지 하는 constructor vector double_vector(10,0.0); // for initailiztion vector string_vector(10,"hello"); // for inita..
-
STL Container 선택C++ 2014. 2. 17. 07:58
표준 STL은 기본적으로 Homogeneous Collection만을 지원한다. 즉 같은 타입의 Object만을 저장할 수 있다. 일단 크기를 예상할 수 있다면 array 가 가장 좋다. 객체를 Access time이나 객체의 추가 삭제가 쉽고 가장 빠르다. 그러나 array를 사용하기 어려운 경우에 적당한 STL container를 찾아보자. Containment ClassContainer Type Insert/DeleteAccessVectorSequencialDynamic Array 데이타 억세스가 많고 데이타의 추가가 뒤에서 일어날때O(1) 임의지점 O(N-p)O(1)ListSequencialBinary Linked List 데이타의 추가 삭제가 빈번하고 접근하는 일이 적을 때O(1)O(N) or ..
-
Inheritance 에서 copy operator & assignment operatorC++ 2014. 2. 15. 07:17
Class에서 pointer를 사용하여 Heap Memory를 동적으로 할당하는 경우copy operator를 반드시 정의 해주어야 한다. 마찬가지로 Assignment Operator 사용도 마찬가지로 꼭 정의를해주는 것이 좋다. 이런 문제는 부모 자식의 상속관계에서도 반드시 고려해주어야 하는 것이 있다. 자식 class에서 Copy Operator를 정의하는 경우에는 반드시 부모 Class의Copy Operator도 정의를 하고 호출을 해주어야 한다. 자식 class에서Assignment Operator를 정의하는 경우에는 반드시 부모 Class의Assignment Operator도 정의를 하고 호출을해주어야 한다 Class Super { Super(); Super(const Super& inSupe..
-
Up-casting and Object SlicingC++ 2014. 2. 14. 07:39
Up-casting은 Polymorphism에서 상위 클래스 타이프로 하위클래스의 객체를 복사할 때 발생을 한다. 이 때 생성되는 객체는 기본적으로 하위 클래스의 멤버를 완전히 잃어 버리고 상위 클래스의 멤버만을 갖게 된다. 좀 더 깊이 생각을 해보면 1)의 예에서는 상위클래스의 default Assignment Operator가 호출이 되어 이미 생성된 하위 클래스의 객체를 복사를 하는 데 상위클래스의 클래스의 멤버만이 복사가 된다. 따라서 멤버함수가 Virtual 이 선언이 되어 있어도 더 이상 찾아볼 하위 멤버함수가 없다. 따라서 상위 멤버 함수가 수행이 된다. 이것이 Slicing이다. 2)의 예에서 보면 ref는 이미 생성이 된 하위 클래스의 객체의 참조값만을 상위 클래스의 default Ass..
-
Polymophism의 사용C++ 2014. 2. 14. 03:48
Polymophism을 이해하는 여러가지 개념 중에 잘 언급이 안 되는 부분이 객체의 형변환으로 이해를 하는 것이 가장 적합하지 않을까한다. 따라서 Polymophism을 사용할 때는 다음 두가지 방법을 사용하는 대 객체 생성 (Heap) 부모의 Class로 자식의 객체를 생성하는 방법은 불가능하다. 가능한 벙법은 자식의 객체를 Heap에 생성을 하고 부모의 class로 pointer를 사용하는 방식이다. 따라서 반드시 이런 코드가 된다. First *pf2 = new Second(); pf2->print(); delete pf2; 이 코드에서도 Overriding 의 규칙은 그대로 적용이 된다. 참조를 사용 Second pf2; First& ref=pf2; Ref.print();
-
Overriding과 VirtualC++ 2014. 2. 14. 01:56
Overriding을 사용하는 목적은 자식 클래스에서 부모 클래스의 멤버나 함수를 재정의해서 쓰는 것이다. 기본적인 문법적 사용방법은Overriding되는 함수에 부모, 자식 모두에게 항상 Virtual을 사용하라는 것이다. 이렇게 사용하면 생성된 객체의 멤버함수가 언제나 호출이 된다. 혼란이 발생하는 경우는 다형성이 사용되는 경우인데 First* pf2 = new Second(); pf2->print(); // Virtual의 특성에 의해 자식의 함수가 호출 delete pf2; 호출이 되는 순서를 보면 print() 가 호출이 되면 먼저 pf2의 포인터가 가르키는 부모의 print()를 찾고 virtual이 선언되었으므로 child로 내려가서 print()를 수행한다.만일 Virtual 이 선언되지 ..
-
Inheritance에서 virtual destructorC++ 2014. 2. 14. 01:12
Inheritance가 있는 Class를 정의할때는 destructor에 습관적으로 virtual을 부모, 자식에 붙인다. 1) First* pf1 = new First(); pf1->firstPrint(); delete pf1; Second* ps1 = new Second(); ps1->secondPrint(); delete ps1; 2) First* pf2 = new Second(); // polymophism pf2->firstPrint(); delete pf2; First default constructor First print First destructor First default constructor Seconds default constructor Second print Second dest..
-
Const Keyword에 대한 정리카테고리 없음 2014. 2. 13. 10:20
const keywrod의 정의변수를 상수화 하는 것처음에 가능하면 const keyword를 많이 사용하는 것이 좋고 Pointer 대신에 Reference 를 가능한 한 많이 사용을 하라고 하였다. 여기서는 const의 문법적인 설명보다는 Error 없는 코드를 만들기 위하여 어떻게 const를 사용하는가 하는데 중접을 두어 정리하고자 한다. Const 변수 Const double PI = 3.14 이런 변수가 객체에 들어가 메모리를 차지할 필요가 없다. 차라리 #define PI 3.14 이 훨씬 간결하고 보기 좋다. 그러나 객체별로 각각 하나의 상수값을 가져야 하는 멤버함수 예를 들면 Class student { const int id; // id는 초기화때만 세팅이 가능, 객체가 소멸할 떄가지 ..