전체 글 300

Conversion Functions - 변환함수

Conversion Functions #변환함수 객체를 특정한 타입으로 암시적으로 변환할수 있는 능력을 부여하는 함수입니다. class String { public: /* ... */ // 변환함수 // 암시적으로 const char* 타입으로 변환하게 합니다. operator const char*() { return pstr; } private: char *pstr; }; int main() { String str; // 변환 함수가 사용됩니다. const char *pstr = str; } 변환함수는 많은 융통성을 제공하고 프로그램하는데 있어 좋은 인터페이스를 제공합니다. 허나 변환함수는 많은 함정을 가지고 있습니다. 의도적이지 않는 형변환으로 인하여 문제를 야기 할수 있습니다. #include us..

Dev/C++ 2008.05.01

explicit

explicit #암시적으로 클래스 타입으로의 형변환을 막는 키워드 입니다. 비교적 C++표준의 후반부에 채택된 사항이며 클래스의 생성자에 사용하는 키워드 입니다. 어떤 타입(객체)에서 특정 타입으로의 암시적인 형변환은 파라미터가 1개인 생성자에 근거하여 이루어 집니다. #include using namespace std; class CInt { public: CInt() {} CInt(int n) : n_(n) {} ~CInt() {} operator int() { return n_; } private: int n_; }; int main() { CInt Number; // 파라미터가 1개인 생성자인 // CInt(int n)에 근거하여 암시적인 // 형변환이 이루어 집니다. Number = 34; /..

Dev/C++ 2008.05.01

template

generic #template은 C++의 generic한 기능을 받쳐주는 핵심적인 도구입니다. 이 도구에 의해 탄생한 STL과 표준 라이브러리들은 확장성과 타입 안정성등의 이점으로 다른 언어의 라이브러리들과는 다른 진화된 디자인을 보여주고 있습니다. 이름 그대로 template은 타입에대한 명세서와 같습니다. template 자체가 타입이 아니고 타입에 대한 내용을 기술함으로서 타입생성에 틀이 되는 것입니다. 붕어빵을 예를들면 붕어빵에 팥을 넣느냐 아니면 계란을 넣느냐에 따라 붕어모양의 붕어빵이 나오느냐 붕어모양의 계란빵이 나오느냐와 같은 이치입니다. 그 붕어빵 틀이 template 입니다. template # #include using std::string; template T Add(T tp1, T..

Dev/C++ 2008.05.01

functor - 함수객체

functor # functor(함수객체)는 함수의 인터페이스를 지원하는 객체를 말합니다. 구체적으로 말하면 class에 operator()를 overloading하여 사용하는 관용구를 말합니다. #include #include using namespace std; class Adder { public: Adder() {} ~Adder() {} int operator()(int lvalue, int rvalue) { return nSum_ = (lvalue + rvalue); } int operator()(int value) { return nSum_ += value; } int Result() const { return nSum_; } private: int nSum_; }; int FnAdd(int ..

Dev/C++ 2008.05.01

Casting operators

Casting operators #C++에서는 4가지의 cast 연산자가 추가 되었습다. 물론 C언어와의 호환성을 위해 C언어의 문법도 지원합니다. 그러나 명확하고 보다 안전함 때문에 C++의 cast를 추천합니다. static_cast #사전적 의미는 런타임시 타입에 대한 체크와 cast가 이루어지는것이 아니고 컴파일시에 체크와 cast되는 연산자 일반적으로 C언어의 형변환이 여기에 속합니다. 그리고 base 클래스에서 derived 클래스로의 down cast시에도 이용되는데 런타임시 타입을 체크하지 않고 cast가 되기 때문에 오버헤드는 없으나 잘못된 포인터로 인한 위험은 존재합니다. class Base {}; class Derived : public Base {}; void f(Derived *p..

Dev/C++ 2008.05.01

export

export #C++ template의 내보내기 키워드 입니다. 아직 제대로 구현되어 있는 컴파일러는 없습니다. template은 타입이 정의 되지 않은 상태의 함수나 객체를 컴파일 타입에 정의를해서 코드를 생성하는 일종의 코드제너레이터 같은 것입니다. template class TClass { T t; }; 위의 코드는 TClass intClass 란 식으로 인스턴스를 만들기 전까지는 혹은 함수 같은 경우 사용되지 전까지는 코드를 만들지 않습니다. 아마 아래와 같은 코드를 컴파일 당시 만들것입니다. class TClass { int t; }; 그도 그럴것이 타입을 모르는데 어떻게 코드를 만들겠습니까? 그렇다고 모든 타입에 대해서(사용자정의 타입까지 한다면 헉..)다 코드를 만들수는 없는 노릇이고 .....

Dev/C++ 2008.05.01

main function

main Function #ISO C++의 공식 main함수의 원형은 아래와 같습니다. int main() int main(int argc, char *argv[]) 두개의 원형이 아닌이상 모두 표준에 어긋나는것입니다. 표준화이전에 쓰여진 책 혹은 컴파일러에서는 void main() 이란 원형도 타탕하다는 주장이 있었습니다. 그러나 그것은 표준에 어긋납니다. VC++ 같은 컴파일러는 void main()을 허용하지만 하위호환성을 위해 남겨 놓은 것 뿐입니다. return #표준 main함수는 int를 리턴하게 되어 있습니다. int main() { return 0; } 허나 ISO C++에서는 main함수에서의 명시적인 리턴이 없으면 자동으로 return 0;를 자동으로 넣어줍니다. // 이 main은 ..

Dev/C++ 2008.05.01

벤치마킹

- 1초동안 실행한 횟수 - 함수 Add : 두수 더하기 AddData : DB에 데이터 Insert - 절대적인 숫자의 크기는 의미없음 (상대적인 수치만 보기) COM+ 벤치마킹 서버 응용프로그램 클라이언트 언어 호출방법 Add AddData VC++ (MFC) ATL/C++, COM+ Custom 10277 381 ATL/C++, COM+ Dispatch 3838 346 C#, COM+ Dispatch 1521 373 C# (WinApp) C#, COM+ 1410 384 라이브러리 응용프로그램 클라이언트 언어 호출방법 Add AddData VC++ (MFC) ATL/C++, COM+ Custom 36757 67 ATL/C++, COM+ Dispatch 15895 65 C#, COM+ Dispatch ..

Dev/Windows 2007.10.17