본문 바로가기

Dev/C++

최소 완전한 클래스를 만들어라 OOP는 능숙되지 않은 프로그램머에게 나쁜프로그램을 못하게 하는 것이다 # OOP는 데이터와 그 데이터를 조작하는 오퍼레이터를 캡슐화 함으로서 은닉화를 통한 데이터 보호와 추상화를 통한 인터페이스 노출, 상속을 통한 코드 재활용으로 견고하고 융통성있는 프로그램을 만들기 위한 좋은 개념입니다. 그 구체화된 도구가 class 입니다. 최소 완전한 class를 만들어라 #Effective C++에서는" 최소 완전한 class를 만들어라.. 더보기
RAII (Resource Acquisition Is Initialization) Resource Acquisition Is Initialization #직역하면 자원의 획득은 초기화이다 .. 이말은 C++계의 대부 Bjarne Stroustrup 에 의해 나온 관용구 입니다. http://www.research.att.com/~bs/homepage.html 자원(여기서 자원이란 메모리 뿐만 아니라 OS에 요청에서 얻어지는 모든건 ..)의 소멸(해제)은 Destructor(소멸자)에서 처리 하라는 말과 일맥 상통.. 더보기
상속되지 않는것 상속되지 않는것 #  constructor   destructor   assign operation   static member   friend  더보기
STL STL #Standard Template Library STL은 Alexander Stepanov가 Meng Lee와 함께 template으로 구현한 라이브러리 입니다. 1993년 표준화가 이루어질쯤 Alexander Stepanov의 STL을 보고 C++ 표준 위원회의 만장 일치에 의해서 표준에 합류 하게 되었고 STL로 인해 표준화는 몇년 늦어진 1998년에야 이루어 지게 됬습니다. (이 기간 언어적인 확장은 없었으며 explicit .. 더보기
new 2 new의 실패 #new 키워드의 메모리 할당은 operator new 함수에 의해 처리가 됩니다. 이 operator new 함수의 실패는 ISO C++표준 이전에는 NULL을 리턴하게 되었으나 ISO C++표준에서는 std::bad_alloc 객체를 예외로 발생 시키는 것으로 결정 되었습니다. #include <stdexcept> #include <iostream> using namespace std; .. 더보기
new 1 new #new 키워드는 C++에서 힙영역에 메모리를 할당하기 위해 사용됩니다. 힙영역이란 프로그램(프로세스)이 메모리에 로딩이 될때 사용되는 메모리영역(정적영역, 스택, 코드영역) 을 제외하고 OS 차원에서 허용해주는 메모리 영역입니다. 그래서 힙영역은 프로그램차원에서 다룰수 있는 영역이 아니므로 OS에게 요청을해서 메모리를 받아와야 됩니다. C언어의 malloc 함수와 C++의 new는 OS에게 그런 요청을 해서 메모리는 얻어오.. 더보기
initialization - array structure 배열및 구조체의 초기화 # // 3개의 원소를 각각 1, 2, 3 으로 초기화 int nArr[3] = { 1, 2, 3 }; // 4개의 원소를 가지는 배열 4개를 1, 2, 3, 4 로 초기화 // 이때 배열의 개수는 4개로 자동으로 정의됨 int nArr[] = { 1, 2, 3, 4 }; struct St { int a; int b; }; // 구조체 St의 멤머 a, b를 각각 1, 2로 초기.. 더보기
operator overloading 2 operator->() #"->"의 연산자 겹지정은 포인터를 리턴으로 하는 형식을 취하고 있으며 리턴되는 포인터의 "->" 연산자를 사용한 효과를 내는 특이한 특성을 가지고 있습니다. 이러한 형식으로 operator->() 함수의 리턴되는 포인터의 멤버를 제어할 수 있는 능력을 부여합니다. #include <iostream> #include <string> using namespac.. 더보기
operator overloading 1 operator overloading #연산자 겹지정은 c++의 사용자 정의 타입 - class - 에 기본타입의 인터페이스를 부여할때 사용합니다. 예를들어 집합 객체에 "+" 연산자를 이용해서 합집합을 구현한다던가 스트림 객체와의 인터페이스를 위해 "<<" 나 ">>" 를 구현하는것이 여기에 속합니다. 연산자 겹지정은 연산자 마다 각각 그 의미에 맞게 구현 할수도록 규칙이 존재합니다. 예를들어 +, -, .. 더보기
Conversion Functions - 변환함수 Conversion Functions #변환함수 객체를 특정한 타입으로 암시적으로 변환할수 있는 능력을 부여하는 함수입니다. class String { public: /* ... */ // 변환함수 // 암시적으로 const char* 타입으로 변환하게 합니다. operator const char*() { ret.. 더보기
explicit explicit #암시적으로 클래스 타입으로의 형변환을 막는 키워드 입니다. 비교적 C++표준의 후반부에 채택된 사항이며 클래스의 생성자에 사용하는 키워드 입니다. 어떤 타입(객체)에서 특정 타입으로의 암시적인 형변환은 파라미터가 1개인 생성자에 근거하여 이루어 집니다. #include <iostream> using namespace std; class CInt { public: CInt().. 더보기
template generic #template은 C++의 generic한 기능을 받쳐주는 핵심적인 도구입니다. 이 도구에 의해 탄생한 STL과 표준 라이브러리들은 확장성과 타입 안정성등의 이점으로 다른 언어의 라이브러리들과는 다른 진화된 디자인을 보여주고 있습니다. 이름 그대로 template은 타입에대한 명세서와 같습니다. template 자체가 타입이 아니고 타입에 대한 내용을 기술함으로서 타입생성에 틀이 되는 것입니다. 붕어빵을 예를들면.. 더보기