반응형

언어 33

[C++] 프로그램 실행 순서

개요 C++의 프로그램 실행 순서에 대해 서술한다. 일반적으로 소스 파일 작성 - 전처리기 - 컴파일 - 링킹 - 로딩 - 실행의 단계를 따른다. 소스 파일 작성 에디터를 사용해 프로그램을 작성한다. 이렇게 C++ 문법에 맞게 작성된 프로그램을 원시 파일, 소스 파일이라고 한다. 소스 파일의 확장자의 대부분은 .cpp가 된다. 전처리 컴파일하기 전에, 컴파일러가 작업하기 좋도록 소스를 재구성한다. 코드를 추가로 생성하지는 않는다. #include에 지정된 내용을 복사하고, #define에 정의된 매크로를 치환한다. #if, #ifdef, #pragma 등의 구문들도 처리한다. 컴파일 컴퓨터는 0과 1만 인식할 수 있기 때문에, 소스 파일을 기계어로 변환해야 한다. 컴파일러는 코드들을 어셈블리어로 바꾸어준..

언어/C++ 2022.07.13

[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
반응형