목록전체 보기 (124)
서의 공간
중요하지 않다고 생각되는 과정은 생략했다. 예를 들어 키보드를 추가하는 부분. 필요하다고 생각되면 추가하겠다. 다음은 현재까지의 프레임워크 구조이다(Graphics 클래스 포함). 재차 확인해야 할 것은 위 그림의 구조는 클래스 간의 '상속'관계를 나타내는 것이 아니라는 점이다. 포함관계라고 생각하자. 핵심 개념 1. ID3D11Device: 장치 인터페이스는 가상 어댑터에 해당한다. 자원을 만드는 데 사용된다. 가상의 디스플레이 어댑터 즉, 그래픽카드인지 아니면 그래픽카드와 나를 연결시켜주는 매개체인 건지 불분명하다. 2. IDXGISwapChain: 렌더링 된 데이터를 출력에 표시하기 전에 저장하기 위한 하나 이상의 표면을 구현한다. 그 표면은 백버퍼라고 한다. 3. ID3D11DeviceContex..
윈도우 클래스를 새롭게 정의하고, 윈도우를 만든다. 전체 프레임워크의 구조는 다음과 같다. 두 의미의 '클래스'가 혼용되어 사용되고 있다. 위 그림의 WindowClass에서 Class의 의미는 C++의 클래스(구조체)가 아니라 화면에 표시할 창을 의미한다. 그리고 WindowClass클래스는 Window클래스의 내부 클래스이다. 문맥상 구분할 것. WinMain함수에서 Window 클래스 객체를 생성하면 Window 클래스의 내부 클래스인 WindowClass의 객체가 생성된다. WindowClass 클래스는 싱글톤 패턴으로 정의되어 윈도우 클래스(화면에 표시할 창)를 정의하고 등록한다. 조금 어려운 부분은 아래에 있는 메시지를 처리하는 부분인데, 일단은 넘어가도 좋다. 천천히 알아볼 것. static..
[출처 위키피디아]: 마이크로소프트 윈도우의 메시지 루프 - 위키백과, 우리 모두의 백과사전 (wikipedia.org) 메시지 루프(message loop)는 윈도우 프로그램에서 메시지를 받아들이는 부분을 뜻하며, 윈도우 기반의 모든 GUI 프로그램에 반드시 포함되는 루틴이다. 윈도우의 GUI 프로그램은 기본적으로 이벤트 드리븐으로 동작한다. 윈도우 시스템은 각각 프로세스에 대해서 개별적인 메시지 큐를 할당한다. 어떤 프로세스가 실행되었을 때 해당 프로세스는 메시지 큐를 부여 받으며, 프로세스에 대해서 사용자의 마우스 입력이나 키보드 입력 등 메시지가 발생했을 때 운영체제가 해당 프로세스의 메시지 큐에 메시지를 넣는다. 또는 프로세스가 이런 메시지들을 스스로 자신의 큐에 추가할 수도 있다. 사용자의 입..
아주 기본적인 윈도우를 만드는 과정을 살핀다. 먼저 하나의 윈도우를 만드는 과정의 전체 흐름이다. [Register window class]: 윈도우의 기반이 되는 윈도우 클래스의 속성을 설정하고, 등록한다. [Create window instance]: 윈도우를 만들고 메모리상에 올린다. [Show the window]: 만든 윈도우를 화면에 표시한다. [Message Loop]: 메시지 루프를 처리한다. 아래 코드는 위 1~3 과정에 대한 코드이다. 각 속성의 의미와 함수의 파라미터는 MSDN을 참고 할 것. #include int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )..
[문제]: 10826번: 피보나치 수 4 (acmicpc.net) BigInteger 클래스를 만들어서도 풀어보자. operator+()함수의 string 파라미터는 참조형 변수가 아니다. #include #include #include #include using namespace std; // 이 함수는 46번 라인에서 호출됨 string operator+(string str1, string str2) { string ret; int n = 0, carry = 0; // 일의 자리부터 계산하기 위해 reverse(begin(str1), end(str1)); reverse(begin(str2), end(str2)); // 자릿수가 더 적은 숫자 앞에 0을 채워준다. // 예) 254 + 31 -> 254..
템플릿 (C++) | Microsoft Docs C++는 객체지향 프로그래밍 언어일 뿐만 아니라 제네릭 프로그래밍(generic programming) 언어이기도 하다. 제네릭 프로그래밍의 목적은 재사용 가능한 코드를 만드는 것이다. 이것을 위한 가장 기본적인 도구가 바로 템플릿(template)이다. 템플릿은 데이터 타입을 값으로 파라미터화 한다. C++에서 기본 내장 타입 int와 double은 물론 MyObject, Pawn 같은 사용자 정의 클래스까지 포함한다. 템플릿을 이용하면 값에 독립적일 뿐만 아니라 그 값의 타입에도 독립적인 코드를 만들 수 있다. 컴파일러가 템플릿 클래스를 처리하는 방법 컴파일러가 템플릿 메서드 정의 코드를 만나면 문법은 검사하지만 실제로 컴파일은 하지 않는다. 어떤 타입..
Keywords (C++) | Microsoft Docs 1. alignas 더보기 정렬을 제어하는 키워드이다. DirectX 프로그래밍을 할 때 보통 상수 구조체의 데이터 멤버를 정렬할 때 쓴다. 이유는 C++에서 구조체를 메모리에 올렸을 때 구조체 멤버들을 정렬하는 규칙이 HLSL의 규칙과 안맞기 때문이다. HLSL에서 데이터 멤버들을 4차원 벡터단위로 채워 넣되 하나의 멤버가 두 개의 4차원 벡터에 걸쳐 나누어지면 안 된다는 제약을 지키기 위해 여분의 바이트들이 추가된다. 다음 예를 보면, // HLSL struct S { float3 Pos; float3 Dir; }; 이 구조체를 4차원 벡터에 채워 넣는다면 다음 모습과 같다. vector 1: (Pos.x, Pos.y, Pos.z, Dir.x)..
STL은 네 가지의 구성 요소로 이루어진다. Containers(컨테이너) Iterators(반복자) Algorithms(알고리즘) Functions(함수자) 1. Containers(컨테이너) STL 컨테이너는 데이터를 모아서 저장해둘 수 있는 제네릭 데이터 구조다. 더보기 컨테이너 클래스 컨테이너 타입 삽입 성능 삭제 성능 접근 성능 vector 시퀀스 컨테이너 끝부분에서 분할 상쇄 상수 시간 \(O(1)\), 임의의 위치 p로의 삽입은 \(O(N-p)\) 끝부분에서 분할 상쇄 상수 시간 \(O(1)\), 임의의 위치 p에서의 삭제는 \(O(N-p)\) \(O(1)\) list 시퀀스 컨테이너 \(O(1)\) \(O(1)\) \(O(N)\), 확률적으로 \(O(N/2)\) forward_list 시퀀..
[C++ 표준라이브러리 참조 MSDN]: C++ Standard Library Reference | Microsoft Docs 카테고리 헤더 알고리즘 , , 아토믹 연산 C 라이브러리 래퍼 , , , , , , , , , , , , , , , , , , , , , , , , , , 개념 컨테이너 시퀀스 컨테이너 , , , , 정렬된 연관 컨테이너 , 정렬되지 않은 연관 컨테이너 , 컨테이너 어댑터 , 컨테이너 뷰 오류 및 예외 처리 , , , 일반 유틸리티 , , , , , , , , , , , , , , , I/o 및 서식 지정 , , , ,, , , , , , , , , 반복기 언어 지원 , , , , , , , , , , , , , , ,, , 지역화 , , , , 수학 및 숫자 , , , , , ..