반응형

언어/C++ 27

[C++] 가상 함수 (virtual)

개요 가상 함수(virtual funcion)란, 자식 클래스에서 재정의할 것으로 예상되는 멤버 함수를 의미한다. 가상 함수는 자신을 호출하는 객체의 타입에 따라 실제 호출할 함수가 결정된다. 부모 클래스에서 virtual을 사용해 가상 함수를 선언하면, 자식 클래스에서 재정의된 멤버 함수도 자동으로 가상 함수가 된다. 선언 virtual FunName(); 동적 바인딩 C++ 컴파일러가 함수를 호출할 때 함수가 어느 블록의 어느 메모리 위치에 있는지 정확히 알고 있어야 한다. 대부분의 함수를 호출하는 코드는 컴파일 타임에 고정된 메모리 주소로 변환된다. 이것을 정적 바인딩(static binding), 초기 바인딩(early binding)이라고 한다. C++에서 가상 함수가 아닌 멤버 함수는 정적 바..

언어/C++ 2022.07.10

[C++] 깊은 복사와 얕은 복사

기본 복사 생성자는 멤버 대 멤버를 복사한다. 이러한 방식은 "얕은 복사"라고 한다. 힙 영역의 메모리 공간을 참조할 때 얕은 복사의 문제가 발생한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include #include #pragma warning(disable:4996) using namespace std; class Person { private: char* name; int age; public: Person(const char* myName, int myAge) { int len = strlen(myName) + 1; name = ..

언어/C++ 2022.03.08

[C++] Upper_bound, Lower_bound

개요 C++에서 이분 탐색으로 원소를 탐색하는 함수 중 하나이다. 두 함수를 사용하기 위해서는 algorithm 헤더의 include가 필요하다. 또한, 이분 탐색 특성상 배열이 오름차순으로 정렬되어 있어야한다. 설명 upper_bound : 배열에서 key값을 초과하는 수의 iterator 중, 가장 작은 iterator 반환 lower_bound : 배열에서 key값 이상의 수의 iterator 중, 가장 작은 iterator 반환 두 함수 모두 해당하는 수가 없다면, end iterator를 반환한다. iterator 타입을 반환하므로, 인덱스로 바꿔주고 싶으면 begin 등으로 빼주면 된다. 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include #include #incl..

언어/C++ 2022.02.13

[C++] Inner Class (중첩 클래스, Nested Class)

특정 클래스 내부에서만 사용될 클래스를 중첩 클래스라고 한다. 내부에 선언된 클래스는 해당 클래스에서만 사용할 수 있고, 외부에서는 사용하지 못한다. (public으로 선언한 경우에는 접근자체는 가능하다.) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include #include using namespace std; class Person { public: string name; class Address { public: string country; string city; int houseNumber; }; Address add; void print() ..

언어/C++ 2022.01.06

[C++] #pragma once와 #ifndef ~ #endif

컴파일시에 C++의 #include는 해당 헤더의 내용이 복사되어 들어오게 된다. 이 때, 같은 내용의 헤더가 두 번 이상 복사될 수 있는데, 이것을 막아주는 게 #pragma once와 #ifndef ~ #endif이다. 차이점은 다음과 같다. #pragma once는 컴파일 동안 단 한 번만 처리를 하므로 더 빠른 컴파일이 가능해진다. 단, 일부 구형 컴파일러에서는 지원이 안 되는 경우도 있다. #ifndef는 if not defined의 약자이다. 정의하지 않았다면 #define 부터 #endif 까지의 코드를 include 한다. #ifndef EXAMPLE_H #define EXAMPLE_H #endif

언어/C++ 2021.12.26
반응형