플밍/C++ (overview)
-
예외 처리플밍/C++ (overview) 2012. 1. 3. 23:20
2006/09/01 02:47 * 프로그래머는 일반적인 상황과 예외적인 상황을 모두 고려해서 프로그램을 디자인 해야 한다. 사용자는 프로그래머의 입장에서 프로그램을 사용하진 않는다. ======================================================================================== 기존의 예외 처리 기초적인 예외로 divide by 0 가 있다. 기존엔 이런 예외 상황을 처리 하는 방법으로, 0으로 나누게 되느냐 아니냐를 직접 기술해서 예외를 방지했다. 예를 들면.. if(a == 0) cout fct3, 예외 발생! catch문 없다! ->fct2로 예외(100)전달, catch문 없다! -> fct1로 예외(100)전달, catch문 없다! ..
-
템플릿(template)플밍/C++ (overview) 2012. 1. 3. 23:19
2006/08/31 21:41 템플릿이란? 템플릿은 본을 뜨기위한 '틀'이다! 다양한 재료를 넣고 여러번 쓸수 있도록 만들어졌다. 다음과 같이 사용한다. template T add(T a, T b){ ... } 'typename' 대신 'class'를 써도 무방하다. 타입을 T로 치환했으면 typename T라고 쓰면 된다. (T말고 딴걸로 해도 된다.) T가 결정되는 시점은, 저 함수가 호출되는 시점, 좀더 정확히는 인자가 전달되는 순간이다. ======================================================================================== 함수 템플릿 (함수 템플릿과 템플릿 함수는 다르다. 지금 얘기하고자 하는것은 템플릿이긴 템플릿인데 함수의..
-
string 클래스 디자인플밍/C++ (overview) 2012. 1. 3. 23:18
2006/08/31 02:47 시작에 앞서.. 많은 reference서적이 있고, 기본과 원칙 보다는 이를 활용하는 디자인이 더 중시되고 있는데, 그렇다고 절대로 기본과 원칙을 무시해서는 안된다. 기본기가 탄탄해야 한다. 스택과 리스트 구조를 가져다 쓸수는 있지만, 자체를 직접 구현할수 없다면 속빈 강정이지 뭐.. -_- 그런 의미로 string 클래스를 직접 구현해보자. ======================================================================================= 표준 string 클래스 C++ 표준 library에는 문자'열'을 다루기 쉽도록, string 클래스가 만들어져 있다. 사용할때는 헤더 파일 string 을 포함해야 한다. 직접..
-
연산자 오버로딩플밍/C++ (overview) 2012. 1. 3. 23:16
2006/08/21 21:31 연산자 오버로딩 ... operator연산자기호(...) 와 같이 선언한다. 예를 들어, void operator+(int i) 이 선언되었을때, x+10 는 x.operator+(10)과 같은 문장으로 해석된다. ======================================================================================== 이항연산자 오버로딩 - 연산자 오버로딩의 두가지 방법 연산자는 단항연산자, 이항연산자, 삼항연산자가 있는데, 이항연산자가 대부분이므로 그에대한 이야기를 먼저 해보자. 첫번째. 멤버 함수에 의한 오버로딩 class AAA{ AAA operator+(const AAA& _a) const{ .... } }; ma..
-
virtual 응용(원리, 다중상속)플밍/C++ (overview) 2012. 1. 3. 23:14
2006/08/19 13:34 클래스의 멤버 함수는 실제로 어디에? 여지껏 멤버 변수와 멤버 함수는 모두 객체 내에 존재한다고 얘기해왔다. (그렇게 생각하고 프로그래밍 해도 상관은 없다.) 그러나, 우리는 실체를 알고는 있어야 한다. 멤버 변수는 각 객체 내에 존재하는게 맞지만, 멤버 함수는 아니다. 멤버 함수는 어짜피 같은 일을 하기때문에 각 객체 내에 두기엔 공간 낭비가 심하다. 그래서 한곳에 멤버 함수를 두고, 각 객체가 그 함수를 복사해 쓰는 식으로 한다. ======================================================================================== 가상 함수가 동작하는 원리 가상 함수는 실제로는 그곳에 없는 함수라고 했는데, 그럼 ..
-
상속(심화), 두종류binding, virtual플밍/C++ (overview) 2012. 1. 3. 23:12
2006/08/16 03:03 상속을 때에 맞춰서 잘~ 활용해보자. (문제 상황에 따른 좋은 클래스 디자인 모델의 집합을 가리켜 "Design Patterns"라 한다.) 1. is-a 관계의 상속 class Vehicle{ .... }; class Airplane : public Vehicle{ .... }; 이처럼 표현하면 된다. 2. has-a 관계의 상속 is-a관계와 마찬가지로, class Police{ .... }; class Cudgel : public Police{ .... }; 이렇게 표현해도 틀린건 아니지만, class Cudgel{ .... }; class Police{ Cudgel ccc; .... }; 이렇게 확실히 포함관계로 표현해주는것이 더 좋다. 이때 Police에 포함된 c..
-
상속플밍/C++ (overview) 2012. 1. 3. 23:03
2006/08/05 17:24 상속 등장 배경 새로운 클래스가 추가되어도 프로그램의 다른 영역에는 전혀 변경이 가해지지 않았으면 좋겠다.. 예로, 자동차, 기차, 비행기..각각의 클래스를 만들면, 세가지는 모두 '탈것'이라는 공통점을 가지고 있으므로, 분명히 공통적으로 포함되는 멤버를 가지게 될것이다. 같은 문장을 세번이나 쓰는건 낭비다. 그래서 그 공통점만 뽑아서 '탈것'이라는 클래스를 만들면 된다. 그다음, 각각의 교통수단에 상속되어 사용되면 좋다. 즉, 상속을 당하는 base클래스는 좀더 추상적이고, 상속을 하는 derived클래스는 좀더 구체적이다. class AAA{ int top; public: AAA(); AAA(int i); }; class BBB : public AAA{ public: B..
-
modifier 종류 : const, static, explicit, mutable플밍/C++ (overview) 2012. 1. 3. 23:02
2006/08/04 12:54 const (활용예는 다른글에서 써놓았으니 목록에서 찾아보기.) 1. const 멤버 변수 const는 초기화 당시의 값을 절대로 변경할수 없도록 상수화 시키는 키워드 이다. 즉, 선언 당시에 초기화가 되어야 한다. 그런데.. 클래스를 정의할때는 멤버 변수를 초기화 할수 없도록 되어 있다. class AAA{ const int a; public: void func1(){ a = 10; } }; 그렇다고 이렇게 해버리면, 컴파일오류가 난다. a를 위한 메모리 공간이 할당되면서 쓰레기값으로 초기화가 되는데, 쓰레기라고 할지라도 그 자체도 값이기 때문이다. 그럼 어떻게? class AAA{ const int a; public: void func1():a(10){ ; } }; 굵게..