All (93)
-
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는 자식..
-
2023.04.03 데이터 값이 갑자기 지수승으로 바뀌는 경우
여러 가지가 있긴 한데 하나씩 확인 중 1. 파일입출력에서 지수승 뜨는 값은 보통 값이 0 인 경우가 많음. 2. long 을 float 에 넣을 때 지수승으로 바뀔 수 있음 --> 메모리 구조가 달라서 값이 날아가는 것 같음. ex. long startX = (m_Size) * -1; ulong startGap = 0; float posX = startX + startGap;
-
2023.03.03 MFC 윈도우 창 분할 시 에러날 때
윈도우창 분할할 때 빨간 에러박스 뜰 때 하위로 넣을 창의 속성이 child 인지 확인해볼 것.
-
2023.03.01 Git 을 사용해서 팀 작업하기
Visual Code 가 아닌, Visual Studio 사용 팀 작업 전에 해야할 것1. git bash 열어서 git config --list 입력(remote 하기 : 원격 저장소랑 연결하기)2. VS 에서 remote 체크 (메뉴 - Git > 설정 > 옵션 > Git 리포지토리 설정 > 원격 > 프로젝트이름.git 연결되어있는지 확인) My 브랜치 선택 > My 로컬 이 생긴다. (아마 동일한 듯)브랜치 이름: Name 커밋 : VS (로컬) 에 저장푸시 : 깃허브 브랜치에 저장풀리퀘스트 : 머지 + 저장 을 요청 끌어오기(파란색 pull) : Name 원격 > Name로컬 로 받는 것이다.우리가 받아야하는 건 : origin master > Name 로컬 이거 하는 방법이 명령 프롬프트 (g..
-
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..