목록C++ (29)
헤더파일
상수 멤버 함수를 코드의 실수를 줄이는 이유도 있지만 상수 객체에서 사용하기 위한 이유도 있습니다. class Rect { int width; int height; public: Rect(int x, int y) :width(x), height(y) {} int getArea()/*const*/ { return width * height; }; }; void foo(const Rect& r) { cout
멤버함수 호출 원리 class Point { int x = 0, y = 0; public: void set(int a, int b) //set(Point* const this, int a... { x = a; y = b; } }; int main() { Point p1; Point p2; p1.set(10, 20); // set(&p1,10,20) } 객체마다 함수를 할당하지 않는데 어떻게 p1의 x, y를 set하는지 알 수 있을까? 주석처럼 객체에 대한 포인터를 넘기기 때문에 가능합니다. 객체의 주소를 레지스터로 보내주고 함수 내부적으로는 레지스터의 값을 이용하여 동작합니다. 이런 동작을 this call 이라고 합니다. class Point { int x = 0, y = 0; public: void..
런타임 형식 정보 RTTI(런타임 형식 정보)는 프로그램 실행 중에 개체의 형식이 결정될 수 있도록 하는 메커니즘입니다. 많은 클래스 라이브러리 공급업체가 이 기능을 자체적으로 구현하고 있었기 때문에 RTTI가 C++ 언어에 추가되었습니다. 이 때문에 라이브러리 간에 호환되지 않는 문제가 발생하게 되었으므로 언어 수준에서 런타임 형식 정보에 대한 지원이 필요하다는 사실이 명백해졌습니다. 명확성을 위해 여기에서 RTTI에 대한 설명은 거의 전적으로 포인터에 국한됩니다. 하지만 설명된 개념은 참조에도 적용됩니다. 런타임 형식 정보에는 다음 세 가지 기본 C++ 언어 요소가 있습니다. dynamic_cast 연산자 다형 형식을 변환하는 데 사용됩니다. typeid 연산자 개체의 정확한 형식을 식별하는 데 사용..
보호되어 있는 글입니다.
익명 클래스 형식 Microsoft C 확장을 사용하면 이름을 지정하지 않고 다른 구조체 내에서 구조체 변수를 선언할 수 있습니다. 이러한 중첩된 구조체를 익명 구조체라고 합니다. C++에서는 익명 구조체를 허용하지 않습니다. // anonymous_structures.c #include struct phone { int areacode; long number; }; struct person { char name[30]; char gender; int age; int weight; struct phone; // Anonymous structure; no name needed } Jim; int main() { Jim.number = 1234567; printf_s("%d\n", Jim.number); }..
C++ 컴파일러에서 함수를 오버로딩하는 과정은 다음과 같습니다. 1 단계 자신과 타입이 정확히 일치하는 함수를 찾는다. 2 단계 정확히 일치하는 타입이 없는 경우 아래와 같은 형변환을 통해서 일치하는 함수를 찾아본다. Char, unsigned char, short 는 int 로 변환된다. Unsigned short 는 int 의 크기에 따라 int 혹은 unsigned int 로 변환된다. Float 은 double 로 변환된다. Enum 은 int 로 변환된다. 3 단계 위와 같이 변환해도 일치하는 것이 없다면 아래의 좀더 포괄적인 형변환을 통해 일치하는 함수를 찾는다. 임의의 숫자(numeric) 타입은 다른 숫자 타입으로 변환된다. (예를 들어 float -> int) Enum 도 임의의 숫자 타..
제일 긴 단어 찾기 auto p = max_element(v.begin(), v.end(), [](string a, string b){return a.length() input;sort(input.begin(), input.end()); auto p = find_if(vv.begin(), vv.end(),[&input](PS a){return a.first == input;});for (auto iter = p; (*iter).first == (*p).first; iter++){cout
---------------------------------강의기록시간 - Thu May 31 11:31:56 2018--------------------------------- //-------------------------------------------------------------------//2018.1학기 STL 5/28 월요일 월56목23 (15주 2)//7장 반복자(iterator) - Category//input iterator / output iterator - 반드시 입출력 객체와 연결되어 있어야한다.//forward iterator - 원소를 전진하는 방향으로만 순회//bidirectional iterator - 양방향으로 순회//random iterator - 임의의 위치에 a..