Dev 119

C++에서 프로퍼티 구현하기

C++에서 프로퍼티 구현하기 # C++에서 템플릿을 이용한 프로퍼티를 구현한 소스입니다. VC++에서는 프로퍼티를 컴파일러 차원에서 지원하지만 이건 ANSI 코드입니다. 출처는 BorlandForum 이고 보다 안정적이게 소스를 수정했습니다. #ifndef __PROP_H__BY_CDECL__ #define __PROP_H__BY_CDECL__ namespace Glass { class IYES {}; class YES : public IYES {}; class NO {}; template class Prop { public: typedef Prop this_type; typedef T (Parent::*get_fun)(); typedef void (Parent::*set_fun)(const T&); P..

Dev/C++ 2008.05.01

STLport 초간단 설치

STLport의 사용이유 # VC++ 6.0의 내장된 STL 구현이 비표준인것들이 많아 사용상 어려움 부분적으로 내장된 STL보다 성능이 뛰어남 VC++ 7.0 이후 버전은 개인적으로 자체 STL사용 권장 STLport 초간단 설치 #STLport의 설치방법중 커맨드명령(IDE 없이)을 통해 설치하는 방법을 이용한다. (개인적으로 이방법이 가장 편하고 쉬움) VC++ 6.0을 사용할때 서비스팩은 항상 설치 권장 sp5 or sp6 STLport 받기 #아래의 사이트에서 Current release version파일을 받음 http://www.stlport.org/download.html 받은 압축된(gz이나 zip파일) 파일을 아무데나 풀기 컴파일하기 #압축을 푼 디렉토리에서 src디렉토리로 이동하여 컴..

Dev/C++ 2008.05.01

Stroustrup - The real interview

실제 Stroustrup 인터뷰(The real interview) # 원문: B. Stroustrup, "The real Stroustrup interview," IEEE Computer, vol. 31, no. 6, pp. 110-114, June 1998. 번역문: 서진택의 C++ complete guide중에서 발췌 'The Design and Evolution of C++'(Addison Wesley, 1994)에서, Bjarne Stroustrup은 아래와 같이 논의했다. "프로그래밍 언어는 실제로 세계(world)의 극히 작은 부분입니다. 그러므로 그것은 너무 심각하게 간주되어서는 안 됩니다. 일부분(proportion)의 감각(역자주: '프로그래밍 언어는 전 세계에 비하면, 매우 작은 부분..

Dev/C++ 2008.05.01

qsort vs sort

std::sort 는 qsort 보다 빠르다 # 비교 함수의 리턴값 qsort의 비교함수 리턴 값은 int type 입니다. 그러므로 결과는 3가지 종류이죠 a -1 a > b -> 1 a = b -> 0 그러므로 적어두 2번을 비교 해야 합니다. sort의 비교함수 리턴 값은 bool type이입니다. 그러므로 1번만 비교 하면 되는것이져 template bool comp(const T &a, const T &b) { return a < b // a가 b보다 작으면 참 아니면 거짓 } 비교함수의 inlining 비교자를 함수로 밖에 못넘기기때문에 함수호출로 인한 오버헤드는 불가피 합니다. 만약 비교함수를 inline으로 선언해도 함수 포인터를 사용 하므로 무시됩니다. (inline및 reg..

Dev/C++ 2008.05.01

최소 완전한 클래스를 만들어라

OOP는 능숙되지 않은 프로그램머에게 나쁜프로그램을 못하게 하는 것이다 # OOP는 데이터와 그 데이터를 조작하는 오퍼레이터를 캡슐화 함으로서 은닉화를 통한 데이터 보호와 추상화를 통한 인터페이스 노출, 상속을 통한 코드 재활용으로 견고하고 융통성있는 프로그램을 만들기 위한 좋은 개념입니다. 그 구체화된 도구가 class 입니다. 최소 완전한 class를 만들어라 #Effective C++에서는" 최소 완전한 class를 만들어라 " 라고 얘기 하고 있습니다. 이 얘기는 첨에 이야기한 나쁜프로그램을 못하게하는 것과 일맥 상통하는 내용입니다. 작은 클래스라도 최소 인터페이스라도 완전한 클래스를 구현하는 내용입니다. 그 내용에는 다음과 같은 것들이 있을것입니다. 생성 소멸 복사및 대입 상속 생성 #디폴트 생..

Dev/C++ 2008.05.01

RAII (Resource Acquisition Is Initialization)

Resource Acquisition Is Initialization #직역하면 자원의 획득은 초기화이다 .. 이말은 C++계의 대부 Bjarne Stroustrup 에 의해 나온 관용구 입니다. http://www.research.att.com/~bs/homepage.html 자원(여기서 자원이란 메모리 뿐만 아니라 OS에 요청에서 얻어지는 모든건 ..)의 소멸(해제)은 Destructor(소멸자)에서 처리 하라는 말과 일맥 상통하는 말입니다. 자원의 획득은 생성자에서, 그 자원의 소멸은 소멸자에서 처리하여 어떠한 경우에도 자원의 leak이 발생하지 않게 처리하자 란 생각입니다. 만약 다음과 같은 코드가 쓰레드의 함수안에서 실행 되고 있을때 ... CRITICAL_SECTION g_cs; UINT Ru..

Dev/C++ 2008.05.01

STL

STL #Standard Template Library STL은 Alexander Stepanov가 Meng Lee와 함께 template으로 구현한 라이브러리 입니다. 1993년 표준화가 이루어질쯤 Alexander Stepanov의 STL을 보고 C++ 표준 위원회의 만장 일치에 의해서 표준에 합류 하게 되었고 STL로 인해 표준화는 몇년 늦어진 1998년에야 이루어 지게 됬습니다. (이 기간 언어적인 확장은 없었으며 explicit 같은 제한적인 사항이 몇개 추가 되었습니다.) STL은 공식적인 용어라기 보다 관용적으로 쓰는 C++의 라이브러리 입니다. STL의 범위는 C++의 표준 라이브러리중 알고리즘과 Iterator를 사용하는 컨테이너 객체를 일반적으로 말합니다. STL의 의의중 하나는 C++..

Dev/C++ 2008.05.01

new 2

new의 실패 #new 키워드의 메모리 할당은 operator new 함수에 의해 처리가 됩니다. 이 operator new 함수의 실패는 ISO C++표준 이전에는 NULL을 리턴하게 되었으나 ISO C++표준에서는 std::bad_alloc 객체를 예외로 발생 시키는 것으로 결정 되었습니다. #include #include using namespace std; int main() { try { // 실패한다면 std::bad_alloc 예외 발생 int *p = new int[10000000]; // 구식 컴파일러라면 이 조건에 .. if (!p) { cout

Dev/C++ 2008.05.01