본문 바로가기

C++

(32)
9/6_리플렉션2 보호되어 있는 글입니다.
STL deque / map C++ STL Deque Container Deque 컨테이너는 시퀀스 컨테이너이자, 배열 기반 컨테이너이다. 따라서 Vector 컨테이너와 특징이 매우 유사하다. 하나의 메모리 블록에 저장되는 Vector와 달리 Deque는 여러 개의 메모리 블록에 나눠서 저장된다는 특징이 있다. Deque는 위와같은 메모리 구조를 가지고 있어서, Vector와는 달리 push_front(), pop_front()를 이용하여 제일 앞의 원소도 추가 / 제거할 수 있다. 또한 중간 원소를 추가 / 제거하는 경우(insert, erase), Vector에 비해 약간 더 효율적이다. 이는 Vector에서는 앞 원소를 추가 / 제거하는 것이 불가능한 스택구조이기 때문에, 모든 원소를 뒤에서 밀어야만 하는데, Deque는 앞,..
C++ 배우기 29(시프트 연산자, 비트 단위 연산자) 비트 단위 연산자(Bitwise operators) 비트 단위 연산자는 변수 내의 비트(bit)를 조작할 수 있다. 이를 사용하면 메모리를 절약할 수도 있다. 요즘에는 하드웨어의 발달로 유지보수가 쉬운 코딩을 하는 것이 더 좋은 방법이라고 한다. 때문에 비트 단위 연산자는 특정 상황을 제외하고는 잘 쓰이지는 않는다. 우선 비트 단위 연산자에는 6가지의 연산자가 존재한다. Operator Symbol Form Operation left shift > y all bits in x shifted right y bits bitwise NOT ~ ~x all bits in x flipped bitwise AND & x & y each bit in x AND each bit in y bitwise OR l x l ..
C++ 배우기 28(WinAPI) WinAPI Windows API는 Microsoft Windows에서 사용하는 C언어 기반의 API(Application Programming Interface)를 말한다. 기본적으로는 C언어 기반이지만, C++에서도 사용이 가능하다. 윈도우에서 실행되는 모든 종류의 어플리케이션들은 내부적으로 전부 이 윈도우 API 함수를 호출하는 형태로 바뀐다. 이제 visual Studio로 WinAPI를 다루어 볼껀데, Win32 프로젝트를 생성하는 방법은 다음과 같다. 윈도우 프로시저(Window Procedure) WndProc를 말하며, 윈도우 클래스당 하나씩 배정되며 메시지에 대응하는 방식을 정의함으로써 윈도우의 행동 양식을 결정한다. 그래서 같은 윈도우 클래스로부터 만들어진 윈도우들은 모두 같은 윈도우 ..
C++ 배우기 27(함수포인터) 함수 포인터(function pointer) 기본적으로 포인터는 어떠한 변수의 주소를 저장하고 가리키는 역할을 한다. 즉, 함수 포인터 또한 함수의 주소를 저장하여 가리키는 변수라는 뜻이다. int foo() // foo 함수의 메모리 주소가 0x002717f0라고 가정 { return 5; } int main() { foo(); // 주소 0x002717f0로 점프한다. return 0; } 위의 예시에서 foo는 함수의 이름이고, int(정수)를 반환하며 매개 변수가 없는 함수 타입이다. 여기서 변수와 마찬가지로 함수에도 메모리에 할당된 주소가 존재한다. main에서 () 연산자를 통해 foo함수를 호출하면, 호출되는 함수의 주소로 점프하여 실행하는 방식이다. 따라서 cout으로 foo함수를 출력하면..
C++ 배우기 26(LValue / RValue) C++ 이전에 C에서의 LValue와 RValue는 코드 연산 중에 대입 연산자(=)를 기준으로 왼쪽으로 올 수 있는 값이 LValue, 오른쪽에 존재하는 값이 RValue로 구분했다. 말 그대로 LeftValue / RightValue의 뜻을 가지고 있었다는 것이다. 하지만 지금 배우고있는 C++에서는 다른 관점으로 사용이 되고 있으므로 주의해야 한다고 한다. LValue와 RValue C++에서의 모든 표현식은 전부 Lvalue와 Rvalue로 나타낸다. LValue는 단일 표현식 이후에도 사라지지 않고 지속되는 객체를 말한다. 한마디로 이름을 가지고 있는 객체를 뜻한다. 때문에 const 타입, 그리고 모든 변수들이 바로 LValue라고 할 수 있다. RValue는 표현식이 종료된 후에 사라져서 더..
C++ 배우기 25(복사생성자, 팩토리 패턴) 복사 생성자(copy constructor) 복사 생성자는 자신과 같은 클래스 타입의 객체의 복사본을 생성할 때 다른 객체의 참조(reference)를 매개변수로 받아서, 그 참조를 통해 자신(객체)을 초기화하는 방법이다. 보통의 복사와는 다르게 복사생성자는 복사된 객체가 원본 객체와 같으면서 완전한 독립성을 띄고 있다. 바로 깊은 복사(deep copy)를 통한 복사이기 때문인데, 밑의 사진을 보자. 우선 얕은 복사(Shallow Copy)란, 대입 연산자(=)를 통한 변수에 다른 변수의 값을 대입하는 방식을 말한다. //Shallow Copy(앝은 복사) int x = 10; int y = x; x= 21; cout Make(); } }; 팩토리는 생성자를 대신해서 객체를 생성해주는 디자인 패턴이었다..
C++ 배우기 24(가상함수, 재정의) 가상 함수(virtual function) 가상 함수는 부모 클래스에게 상속받은 자식 클래스에서 재정의할 것으로 기대하는 멤버 함수를 의미한다. class A { virtual void Print(); }; class B : public A { virtual void Print(); }; 위의 예시처럼 virtual을 멤버함수의 원형 앞에 붙여주면 된다. 이런 가상함수를 왜 쓰는 걸까? 우선 바인딩이란 함수를 호출하는 코드에서 어디에 있는 함수를 실행하라는 의미이다. 그리고 여기서 바인딩은 정적 바인딩, 동적 바인딩으로 나눌 수 있다. 우선 정적 바인딩(초기 바인딩)은 컴파일러가 함수를 호출할 때 컴파일 타임에 고정된 메모리 주소로 변환시키는 것을 말한다. 일반적인 함수들은 모두 이런 정적 바인딩을 따르..