본문 바로가기

전체 글86

전처리기 #define 전처리기 지시문 전처리기 지시문은 해시 기호( )가 앞에 오는 프로그램 코드에 포함된 행 #입니다. 이 행은 프로그램 문이 아니라 전처리기에 대한 지시문입니다 . 전처리기는 코드의 실제 컴파일이 시작되기 전에 코드를 검사하고 코드가 실제로 일반 명령문에 의해 생성되기 전에 이러한 모든 지시문을 해결합니다. 이러한 전처리기 지시문 은 한 줄의 코드에서만 확장됩니다. 개행 문자가 발견되는 즉시 전처리기 지시문이 종료됩니다. ;전처리기 지시문 끝에 세미콜론( )이 필요하지 않습니다 . 전처리기 지시문이 둘 이상의 줄을 통해 확장할 수 있는 유일한 방법은 줄 끝에 있는 줄 바꿈 문자 앞에 백슬래시( \)를 지정하는 것입니다. 매크로 정의(#define, #undef) 전처리기 매크로를 정의하기 위해 #defin.. 2022. 8. 22.
exception 예외는 처리기 라는 특수 함수에 제어를 전달하여 프로그램의 예외적인 상황(예: 런타임 오류)에 대응하는 방법을 제공합니다 . 예외를 포착하기 위해 코드의 일부가 예외 검사를 받습니다. 이는 코드의 해당 부분을 try-block 으로 묶음으로써 수행됩니다 . 해당 블록 내에서 예외적인 상황이 발생하면 예외 처리기로 제어를 전송하는 예외가 발생합니다. 예외가 발생하지 않으면 코드가 정상적으로 계속되고 모든 처리기가 무시됩니다. 블록 내부에서 키워드를 사용하면 예외가 발생합니다 . 예외 처리기는 블록 바로 뒤에 배치해야 하는 키워드로 선언됩니다 .throwtrycatchtry // exceptions #include using namespace std; int main () { try { throw 20; }.. 2022. 8. 22.
형변환 클래스에서 암시적 변환 암시적 변환은 값이 호환되는 유형으로 복사될 때 자동으로 수행됩니다. 예를 들어: short a=2000; int b; b=a; 여기서 의 값은 명시적 연산자 없이 에서 로 a승격됩니다 . 이것을 표준 변환 이라고 합니다. 표준 변환은 기본 데이터 유형에 영향을 미치며 숫자 유형( to , to , to ...), to 또는 from 및 일부 포인터 변환 간의 변환을 허용합니다. 더 작은 정수 유형에서 로 또는 from으로 변환 하는 것을 승격 이라고 하며 대상 유형에서 정확히 동일한 값을 생성하도록 보장됩니다. 산술 유형 간의 다른 변환이 항상 동일한 값을 정확하게 나타낼 수 있는 것은 아닙니다.shortintshortintintfloatdoubleintbool intdouble.. 2022. 8. 22.
다형성 이 장을 더 깊이 이해하기 전에 포인터와 클래스 상속에 대해 제대로 이해하고 있어야 합니다. 다음 표현의 의미가 확실하지 않은 경우 표시된 섹션을 검토해야 합니다. Statement :Explained in: int A::b(int c) { } Classes a->b Data structures class A: public B {}; Friendship and inheritance 부모(base) 클래스에 대한 포인터 클래스 상속의 주요 기능 중 하나는 파생 클래스에 대한 포인터가 기본 클래스에 대한 포인터와 형식 호환된다는 것입니다. 다형성 은 이 단순하지만 강력하고 다양한 기능을 활용하는 기술입니다. 사각형 및 삼각형 클래스에 대한 예제는 이 기능을 고려하여 포인터를 사용하여 다시 작성할 수 있습니다.. 2022. 8. 22.
상속 / 프렌드 friend function 원칙적으로 클래스의 private 및 protected 멤버는 선언된 동일한 클래스 외부에서 액세스할 수 없습니다. 그러나 이 규칙은 "친구" 에게는 적용되지 않습니다 . 친구 는 friend키워드로 선언된 함수 또는 클래스입니다. 비멤버 함수는 해당 클래스의 친구 로 선언된 경우 클래스의 private 및 protected 멤버에 액세스할 수 있습니다 . 이는 클래스 내에 이 외부 함수의 선언을 포함하고 키워드를 앞에 둠으로써 수행됩니다 friend. // friend functions #include using namespace std; class Rectangle { int width, height; public: Rectangle() {} Rectangle (int x.. 2022. 8. 22.
생성자/소멸자 Member function typical form for class C: 생성자 C::C(); 소멸자 C::~C(); 복사 생성자 C::C (const C&); 대입 연산자 C& operator= (const C&); 이동 생성자 C::C (C&&); 이동 대입 연산자 C& operator= (C&&); 기본 생성자 기본 생성자 는 클래스의 개체가 선언되었지만 인수로 초기화되지 않을 때 호출되는 생성자입니다 . 클래스 정의에 생성자가 없으면 컴파일러는 클래스에 암시적으로 정의된 기본 생성자 가 있다고 가정합니다 . 따라서 다음과 같이 클래스를 선언한 후: class Example { public: int total; void accumulate (int x) { total += x; } }; 컴파일러는.. 2022. 8. 22.
클래스(2) 연산자 오버로딩 클래스는 기본적으로 C++ 코드에서 사용할 새 유형을 정의합니다. 그리고 C++의 유형은 구성 및 할당을 통해 코드와 상호 작용할 뿐만 아닙니다. 그들은 또한 연산자를 통해 상호 작용합니다. 예를 들어 기본 유형에 대해 다음 작업을 수행합니다. int a, b, c; a = b + c; 여기에서 기본형( )의 다른 변수는 int더하기 연산자를 적용한 다음 할당 연산자를 적용합니다. 기본 산술 유형의 경우 이러한 연산의 의미는 일반적으로 명확하고 모호하지 않지만 특정 클래스 유형에서는 그렇지 않을 수 있습니다. 예를 들어: struct myclass { string product; float price; } a, b, c; a = b + c; b여기서 덧셈 연산의 결과가 무엇을 하고 무엇을.. 2022. 8. 19.
클래스(1) 클래스 는 데이터 구조의 확장된 개념입니다 . 데이터 구조 와 마찬가지로 데이터 멤버를 포함할 수 있지만 함수를 멤버로 포함할 수도 있습니다. 객체 는 클래스의 인스턴스화입니다 . 변수의 관점에서 보면 클래스는 유형이고 객체는 변수입니다. 클래스는 다음 구문과 함께 키워드 class또는 키워드 를 사용하여 정의됩니다.struct class class_name { access_specifier_1: member1; access_specifier_2: member2; ... } object_names; 여기서 class_name는 클래스의 유효한 식별자이고 object_names는 이 ​​클래스의 개체에 대한 선택적 이름 목록입니다. 선언의 본문에는 데이터 또는 함수 선언이 될 수 있는 멤버 가 포함될 수 .. 2022. 8. 19.
기타 데이터 타입 typedef 유형 별칭은 유형을 식별할 수 있는 다른 이름입니다. C++에서는 다른 식별자로 참조할 수 있도록 모든 유효한 형식에 별칭을 지정할 수 있습니다. C++에는 이러한 유형 별칭을 생성하기 위한 두 가지 구문이 있습니다. 첫 번째 구문은 C 언어에서 상속되며 키워드 를 typedef사용 합니다. 예를 들어: typedef existing_type new_type_name ; existing_typenew_type_name typedef char C; typedef unsigned int WORD; typedef char * pChar; typedef char field [50]; 이것은 각각 , , 및 as C, , 및 의 네 가지 유형 별칭을 정의합니다 . 이러한 별칭이 정의되면 다른 유효한.. 2022. 8. 19.
구조체 구조체 데이터 구조 는 하나 의 이름으로 함께 그룹화된 데이터 요소 그룹입니다. 구성원 이라고 하는 이러한 데이터 요소 는 유형과 길이가 다를 수 있습니다. 데이터 구조는 다음 구문을 사용하여 C++에서 선언할 수 있습니다. 여기서 는 구조 유형의 이름이고 이 구조 유형 을 가진 개체에 대한 유효한 식별자 집합일 수 있습니다. 중괄호 안에 데이터 멤버가 있는 목록이 있으며 각 멤버는 유형과 이름으로 유효한 식별자로 지정됩니다. 예를 들어: struct type_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names; type_nameobject_name{} struct .. 2022. 8. 19.
동적 메모리 이전 장에서 본 프로그램에서는 필요한 변수를 정의하여 프로그램 실행 전에 모든 메모리 요구 사항을 결정했습니다. 그러나 프로그램의 메모리 요구 사항이 런타임 중에만 결정될 수 있는 경우가 있을 수 있습니다. 예를 들어, 필요한 메모리는 사용자 입력에 따라 다릅니다. 이러한 경우 프로그램은 메모리를 동적으로 할당해야 하며, 이를 위해 C++ 언어는 연산자 new및 delete. 새로운 연산자와 새로운 연산자[] 동적 메모리는 operator 를 사용하여 할당됩니다 new. new다음에 데이터 유형 지정자가 오고, 둘 이상의 요소 시퀀스가 ​​필요한 경우 대괄호 안에 이러한 요소의 수가 옵니다 []. 할당된 새 메모리 블록의 시작 부분에 대한 포인터를 반환합니다. 구문은 다음과 같습니다 . 첫 번째 표현식은.. 2022. 8. 19.
포인터 이전 장에서 변수는 식별자(이름)로 액세스할 수 있는 컴퓨터 메모리의 위치로 설명되었습니다. 이런 식으로 프로그램은 메모리에 있는 데이터의 물리적 주소에 대해 신경 쓸 필요가 없습니다. 변수를 참조해야 할 때마다 단순히 식별자를 사용합니다. C++ 프로그램의 경우 컴퓨터의 메모리는 크기가 1바이트이고 각각 ​​고유한 주소를 가진 일련의 메모리 셀과 같습니다. 이러한 단일 바이트 메모리 셀은 1바이트보다 큰 데이터 표현이 연속적인 주소를 갖는 메모리 셀을 점유할 수 있도록 하는 방식으로 정렬됩니다. 이러한 방식으로 각 셀은 고유한 주소를 통해 메모리에서 쉽게 찾을 수 있습니다. 예를 들어, 주소가 있는 메모리 셀은 1776항상 주소가 있는 셀 바로 다음에 옵니다.1775및 가 있는 것보다 앞에 1777오고.. 2022. 8. 19.
문자열 클래스 는 string이전 장에서 간략하게 소개되었습니다. 문자열을 처리하고 조작하는 매우 강력한 클래스입니다. 그러나 문자열은 실제로 일련의 문자이기 때문에 문자 유형 요소의 일반 배열로도 나타낼 수 있습니다. 예를 들어, 다음 배열: char foo [20]; 따라서 이 배열은 최대 20자의 시퀀스를 저장할 수 있습니다. 그러나 이 용량이 완전히 소진될 필요는 없습니다. 어레이는 더 짧은 시퀀스도 수용할 수 있습니다. 예를 들어, 프로그램의 특정 지점에서 시퀀스 "Hello"또는 시퀀스 중 하나 "Merry Christmas"를 에 저장할 수 있습니다. foo둘 다 20자 용량의 시퀀스에 맞기 때문입니다. 규칙에 따라 문자 시퀀스로 표현되는 문자열의 끝은 특수 문자로 신호를 보냅니다. null 문자'.. 2022. 8. 19.
배열 배열은 고유 식별자에 인덱스를 사용하여 개별적으로 참조할 수 있는 연속 메모리 위치에 배치된 공간에 접근 할수 있습니다. 일일이 변수를 5개를 선언하지 않고도 배열로 한번에 5개를 선언할 수 있습니다. 대신 배열을 사용하여 5개의 int값이 인접한 메모리 위치에 저장되고 5개의 값 모두 적절한 인덱스와 동일한 식별자를 사용하여 액세스할 수 있습니다. 예를 들어, 호출 된 유형의 정수 값 5개를 포함하는 배열 은 다음과 같이 나타낼 수 있습니다. 여기서 각 빈 패널은 배열의 요소를 나타냅니다. 이 경우 다음 유형의 값입니다. 이러한 요소는 0에서 4까지 번호가 매겨져 있으며, 첫 번째는 0이고 마지막은 4입니다. C++에서 배열의 첫 번째 요소는 길이에 관계없이 항상 0(1이 아님)으로 번호가 매겨집니다... 2022. 8. 19.
namespace 변수, 함수 및 복합 유형과 같은 명명된 엔터티는 C++에서 사용하기 전에 선언해야 합니다. 이 선언이 발생하는 프로그램의 지점은 가시성에 영향을 미칩니다. 블록 외부에 선언된 엔티티는 전역 범위 를 가지며 , 이는 해당 이름이 코드의 어느 곳에서나 유효함을 의미합니다. 함수나 선택문과 같이 블록 내에서 선언된 엔티티는 블록 범위 를 가지며 선언된 특정 블록 내에서만 볼 수 있지만 외부에서는 볼 수 없습니다. 블록 범위의 변수를 지역 변수 라고 합니다 . 예를 들어, 함수의 본문에 선언된 변수는 함수가 끝날 때까지 확장 되는 지역 변수 입니다(즉, 중괄호}함수 정의를 닫는다), 그러나 외부는 아니다: int foo; // global variable int some_function () { int bar.. 2022. 8. 18.
오버로딩과 템플릿 함수 오버로딩 C++에서 두 개의 다른 함수는 매개변수가 다른 경우 같은 이름을 가질 수 있습니다. 매개변수의 수가 다르거나 매개변수의 유형이 다르기 때문입니다. 예를 들어: // overloading functions #include using namespace std; int operate (int a, int b) { return (a*b); } double operate (double a, double b) { return (a/b); } int main () { int x=5,y=2; double n=5.0,m=2.0; cout 2022. 8. 18.
함수 함수를 사용하면 개별 작업을 수행하기 위해 코드 블럭으로 프로그램을 구성할 수 있습니다. C++에서 함수는 이름이 주어지고 프로그램의 특정 지점에서 호출될 수 있는 명령문의 그룹입니다. 함수를 정의하는 가장 일반적인 구문은 다음과 같습니다. type name ( parameter1, parameter2, ...) { statements } type 반환되는 데이터의 타입입니다. name 함수의 이름입니다. (parameter 1, parameter 2, …), 전달인자 입니다. 호출된 위치에서 함수에 인수를 전달할 수 있도록 하는 것입니다. - statements함수의 본체입니다. 함수가 실제로 수행하는 작업을 지정하는 중괄호 { }로 둘러싸인 명령문 블록입니다. 예를 살펴보겠습니다. // functio.. 2022. 8. 18.
명령문 및 흐름 제어 간단한 C++ 문은 이전 섹션에서 본 변수 선언 및 표현식과 같은 프로그램의 개별명령어는 항상 세미콜론( ;)으로 끝납니다. 그러나 프로그램은 선형적으로 하나의 분기로만 실행되지 않습니다. 코드를 반복하거나 또는 여러 분기로 나눌수도 있습니다. 이를 위해 C++는 우리 프로그램이 언제, 어떤 상황에서 무엇을 수행해야 하는지 지정하는 역할을 하는 제어 문을 제공합니다. 조건 문: if 및 else 키워드는 조건 이 if충족되는 경우에만 명령문이나 블록을 실행하는 데 사용됩니다. 구문은 다음 과 같습니다. if (condition) statement condition 조건이 참이라면 조건문 밑에줄에 해당하는 코드를 실행합니다. if (x == 100) cout 2022. 8. 18.
기본 입출력 cout 2022. 8. 17.
연산자 변수와 상수를 연산자를 사용하여 연산 작업을 할 수 있습니다 . 다음은 전체 연산자 목록입니다. 이 시점에서 모든 항목을 알 필요는 없지만 참조용으로도 사용할 수 있도록 모두 여기에 나열되어 있습니다. 대입 연산자(=) 대입 연산자는 변수에 값을 할당합니다. x = 5; 이 문은 정수 값 5을 변수에 할당합니다 x. 할당 작업은 항상 오른쪽에서 왼쪽으로 발생하며 그 반대는 절대 아닙니다. x = y; 문은 변수 에 포함된 y값 x 변수에 할당합니다 .이 명령문이 실행되는 순간 기존에 있던 x값 은 손실되고 y의 값으로 대체됩니다. // assignment operator #include using namespace std; int main () { int a, b; // a:?, b:? a = 10; /.. 2022. 8. 17.
상수 상수 는 고정 값을 갖는 표현식입니다. 리터럴 리터럴은 가장 명백한 종류의 상수입니다. 프로그램의 소스 코드 내에서 특정 값을 표현하는 데 사용됩니다. 이전 장에서 변수에 특정 값을 지정하거나 프로그램에서 출력하려는 ​​메시지를 표현하기 위해 이미 일부를 사용했습니다. 예를 들면 다음과 같습니다. a = 5;​ 리터럴 상수는 정수, 부동 소수점, 문자, 문자열, 부울, 포인터 및 사용자 정의 리터럴로 분류할 수 있습니다. 정수 1776 707 -273 정수 값을 식별하는 숫자 상수입니다. 10진수(우리 대부분이 매일 사용) 외에도 C++에서는 8진수(기수 8) 및 16진수(기수 16)를 리터럴 상수로 사용할 수 있습니다. 8진수 리터럴의 경우 숫자 앞에 0(영) 문자가 옵니다. 16진수의 경우 문자 0x.. 2022. 8. 17.
변수 및 유형 이전 장에서 보여준 "Hello World" 프로그램의 유용성은 다소 의심스럽습니다. 몇 줄의 코드를 작성하고 컴파일한 다음 결과 프로그램을 실행해야 화면에 작성된 간단한 문장의 결과를 얻을 수 있었습니다. 출력 문장을 직접 입력하는 것이 훨씬 더 빨랐을 것입니다. 그러나 프로그래밍은 화면에 간단한 텍스트를 인쇄하는 데만 국한되지 않습니다. 조금 더 나아가서 실제로 작업을 절약하는 유용한 작업을 수행하는 프로그램을 작성할 수 있게 하려면 변수 개념을 도입해야 합니다 . 숫자 5를 기억하라고 한 다음 숫자 2도 동시에 외우라고 한다고 가정해 보겠습니다. 메모리에 두 개의 다른 값(5 및 2)을 저장했습니다. 이제 내가 말한 첫 번째 숫자에 1을 더하라고 요청하면 숫자 6(즉, 5+1)과 2를 기억해야 합니.. 2022. 8. 17.
프로그램의 구조 프로그래밍 언어를 배우는 가장 좋은 방법은 프로그램을 작성하는 것입니다. 일반적으로 초보자가 처음 작성하는 프로그램은 "Hello World"라는 프로그램으로, 단순히 "Hello World"를 컴퓨터 화면에 인쇄합니다. 매우 간단하지만 C++ 프로그램에 다음과 같은 모든 기본 구성 요소가 포함되어 있습니다. // my first program in C++ #include int main() { std::cout 2022. 8. 17.
컴파일러 컴파일러란 무엇입니까? 컴파일이란 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다. 그리고 이것을 자동으로 수행해주는 소프트웨어를 컴파일러라고 합니다. 초기엔 프로그램을 작성하기 위해서 컴퓨터 위에서 바로 돌아가는 기계어를 통하여 프로그래밍을 했다. 그러나 이런 과정은 생산성, 기기 간 호환성, 디버깅등 모든 면에서 효율적이지 않다. 따라서 컴퓨터 공학이 많이 발전하면서 많은 부분을 추상화된 고수준 언어로 작성하고 이를 번역기를 통해 기계어로 번역하기 시작했는데, 이 번역기가 바로 컴파일러이다. 원칙적으로 컴파일러는 프로그램을 기계어로 바꾸기만 할 뿐 바로 실행이 가능하게 하지는 않는다. 여러 소스 파일에서 나온 결과물을 합치고 라이브러리도 포함시키는 등 별도의 작업을 거쳐야 실행이 되는데 이를 .. 2022. 8. 17.
네트워크 프로그래밍의 이해 네트워크 프로그래밍이란? 멀리 떨어져 있는 호스트들이 서로 데이터를 주고 받을 수 있도록 프로그램을 구현하는 것이다. 파일과 달리 데이터를 주고 받을 대상이 멀리 떨어져 있기 때문에 소프트웨어 차원에서 호스트들간에 연결을 해주는 장치가 필요할 뿐이다. 이러한 기능을 해주는 장치를 소켓(Socket)이라 한다. 그래서 일반적으로 소켓 프로그래밍이라는 용어와 네트워크 프로그래밍이라는 용어는 같은 의미로 사용 되고 있다. 소켓이란 멀리 떨어져 있는 두개의 호스트(host) 를 연결시켜주는 매개체 역할을 한다. 프로토콜의 정의 데이터를 주고 받는 방법은 어떤 방법을 쓰던 간에, 그 방법만큼은 상호간에 반드시 일치 해야 한다. 한사람은 전화를 사용하고 한사람은 편지를 사용할수는 없는것처럼 서로간의 규약이 필요하다.. 2022. 7. 27.
Directx12 초기화 Directx12 렌더링 파이프라인 Directx12 Initialize (초기화) 다이렉트x12 에 필요한 변수와 클래스를 초기화하고 에셋들을 준비합니다. 파이프라인 초기화. Directx12 API 의 디버그를 도와줄 디버그 계층을 설정합니다. 디바이스를 생성합니다. 커맨드 큐를 생성합니다. 스왑체인을 생성해줍니다. 렌더타겟 뷰(RTV) 를 만들기위한 Descriptor Heap 을 만들어줍니다. ( 디스크립터 힙은 리소스에 대한 정보를 설명합니다. 배열로 만들어 질수도 있습니다.) 렌더타겟뷰를 생성합니다. Command Allocator 할당 ( gpu 명령을 저장하기 위한 메모리 할당 ) 명령 할당자는 명력 목록(command list) 및 번들에 대한 기본 스토리지를 관리합니다. Assets 초.. 2022. 7. 25.