Language (37)
-
2024.09.21 C# 데이터 구조와 Object 타입
C# 에서 사용하는 데이터 구조는 크게 2가지이다. ① 값 타입스택 영역에 할당된다복사 시, 값 자체가 복사된다 ② 참조 타입new 키워드를 사용하여 객체를 생성하고, 힙 영역에 할당된다복사 시, 객체를 가리키는 참조만 복사된다 오브젝트 타입C# 의 거의 모든 타입(자료형)은 class System.Object 타입을 상속받는다. class 등 참조 타입 뿐만 아니라, int, float 등 값 타입도 상속받는다. 오브젝트를 상속받는 데이터 구조 코드에서는 주로 object 식으로 작성한다.(namespace 생략됨 System.)Object o1; // object o1; 식으로 단순화할 수 있음object o2; class System.Object 은 내부적으로 4개의 함수를 가지고 있다.1. T..
-
2024.02.26 스마트 포인터와 RAII
C++ 에서 동적 할당을 할 때는 일반적인 포인터를 사용했다. (전통적인 방법) 스마트 포인터 라는 것을 사용하면객체가 지워져야 할 때 굳이 delete 를 해주지 않아도 자동으로 잘 삭제해줄 수 있다. 스마트 포인터를 사용하려면 #include 를 해줘야 한다.스마트 포인터는 3가지 종류가 있다.unique_ptr, shared_ptr, week_ptr 기본적인 사용 방법unique_ptr(new int(5)); // 잘못된 사용 방법unique_ptr a = new int(5);위의 코드는 변환 생성자를 암시하고 있기 때문에 스마트 포인터에서는 변환 생성자를 묵시적으로 호출할 수 없다.그래서 반드시 아래의 형태로 사용해야한다.unique_ptr a(new int(5)); https://www.you..
-
2024.01.17 [C++] cin 입력 시 공백 포함 으로 입력 받기
헤더파일 필요 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /* 공백을 받을 수 없다. */ string s; cin >> s; /* ================== */ int n; cin >> n; // 이전 입력에서 엔터 처리가 존재할 경우 ignore 함수를 먼저 처리해준다. cin.ignore(); /* 공백을 받을 수 있다. */ string s; getline(cin, s); // 해당 방식으로 공백 포함 입력 가능. cs cin.ignore() 이 없을 경우 cin >> n; 에서 엔터 처리가 들어가면서 즉시 getline 함수가 처리된다. 그래서 이전 입력에 엔터 입력이 있을 경우 cin.ignore() 함수를 라인 입력 전에 처리해줘야한다.
-
2023.11.23 [C++] 함수 객체와 임시 객체
함수 객체 : ( ) 연산자 오버로딩을 사용해서 객체를 함수처럼 쓰는 문법 보통 operator( ) 오버로딩 함수 내부에 인라인화를 시켜서 호출 시에 임시 메모리에 들어가도록 의도한다. 하지만 미리 객체를 생성해놓고 필요할 때 사용하는 것이므로 Stack 영역이든 어디든간에 결국 메모리를 사용하는 구조이다. ▼ 함수 객체 예시 더보기 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 42 43 44 45 46 47 48 49 class CSortRule { public: virtual bool operator()(int a, int b) = 0; };..
-
2023.08.19 [펌] 생성자 소멸자 관련
일부 멤버 함수들은 C++에서 클래스 안에 직접 선언해 넣지 않으면 컴파일러가 자동으로 선언해주도록 되어 있습니다. 바로. 1. 복사 생성자(copy constructor) 2. 복사 대입 연산자(copy assignment operator) 3. 소멸자(destructor) 4. 기본 생성자 (선언 해놓지 않았다면) 가 있습니다. 컴파일러가 만드는 함수의 형태는 모두 기본형이다. 모두 public 멤버이며 inline 함수입니다. class Player {}; 이렇게 선언한 클래스와 아래와 같이 선언한 클래스가 대동소이하다는 것입니다. class Player { public: Player() // 기본생성자 {} Player(const Player& rhs) //복사 생성자 {} ~Player() //..
-
2023.08.18 [BT] 요약
각 노드들은 자신의 상태를 반환해야 합니다 Selector는 자식 노드를 실행하여 이 중 하나라도 True를 리턴하면 True를 리턴 > Selector Node는 자식 노드 중에서 처음으로 Success 나 Running 상태를 가진 노드가 발생하면 그 노드까지 진행하고 멈춥니다. 그러므로 Evaluate() 메소드 구현은 아래와 같습니다. 1. 자식 상태: Running일 때 -> Running 반환 2. 자식 상태: Success 일 때 -> Success 반환 3. 자식 상태: Failure일 때 -> 다음 자식으로 이동 Sequence는 모든 자식 노드가 True를 리턴할 때 True를 리턴 (Sequence는 자식 중 하나라도 False면 False를 리턴) > Sequence Node는 자식..
-
2022.11.12 [C++] C++ 스타일 파일입출력
fin 은 자동 개행을 한다 read / wirte 는 개행을 하지 않는다 C++ 스타일 파일 입출력을 사용하려면 아래 헤더파일을 추가해야한다 1. 파일에 쓰기 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 #include using namespace std; class CPlayer { public: void private: char* m_pName; int m_iHp; } void SaveData() { ofstream fout; // 파일 열기 // std::ios_base::binary : 바이너리 모드 fout.open("PlayerData.txt", std::ios_base::binar..
-
2022.11.12 [C] C 스타일 파일입출력
C 스타일 : 자료형 하나씩 저정해도 되지만 보통 구조체로 저장한다. > 한 번에 데이터를 모아서 저장할 수 있어서 C 스타일 파일 입출력을 사용하려면 아래 헤더파일을 추가해야한다 1. 파일에 쓰기 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 #include using namespace std; #define MAX_NAME_LENGTH = 32; struct SAVE_DATA { char arr[MAX_NAME_LENGTH]; int iHp; } void SaveData() { FILE* pWriteFile = nullptr; // 파일 열기 // b : 바이너리 fopen_s..
-
2022.10.23 [C] 문자열 상수
char *test = "abcdef"; 와 char test[] = "abcdef";의 차이점 두 가지의 차이를 이야기 하기에 앞서서 "abcdef"에 대해 짚고 넘어갑시다. "abcdef"란 코드는 컴퓨터가 프로그램을 메모리에 로드할 때 읽기 전용 메모리에 로드되는 문자열 상수입니다. 문자열 상수의 주소란 말이죠. 참고로 읽기 전용 메모리에는 프로그램 코드 라던가 상수가 로드 됩니다. 그럼 돌아와서 문자열 상수 주소를 char *test인 포인터에 넣느냐 아니면 char test[]인 배열에 넣느냐가 차이점 이군요. 둘의 차이는 다음과 같습니다. 1. char *test = "abcdef"; - 포인터에 문자열 상수를 할당합니다. 따라서 문자열을 참조 할 수는 있지만 값을 바꾸지는 못합니다. 문자열이..
-
2022.05.08 [C++] 코드 위치나 정보를 받아오는 매크로 들
디버깅이 어려운 환경에서는 보통 로그를 찍게 되는데 이때 로그에서 코드의 정보를 출력해주는 매크로를 사용해서 추가 정보를 출력할 수 있다. 표준 C++ 에서 제공 __FUNCTION__ 매크로 현재 함수의 이름을 받아온다 C++ 에서는 함수마다 내부적으로 __func__ 라는 로컬 변수가 정의돼있다. 이 변수는 현재 함수의 이름을 저장하고 있다. __LINE__ 매크로 현재 스크립트의 줄번호를 받아온다 __FILE__ 매크로 현재 소스코드의 파일을 받아온다. EX. CGlobal.h... CPlayer.cpp ... 단, 파일 이름만 출력하지 않고 파일의 전체 경로를 출력하게 된다. ▶ C:\CppProject1\TestGame\Source\MyGame\CPlayer.cpp