Game !

All (86)

  1. 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() 함수를 라인 입력 전에 처리해줘야한다.

  2. 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; };..

  3. 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() //..

  4. 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는 자식..

  5. 2023.04.03 데이터 값이 갑자기 지수승으로 바뀌는 경우

    여러 가지가 있긴 한데 하나씩 확인 중 1. 파일입출력에서 지수승 뜨는 값은 보통 값이 0 인 경우가 많음. 2. long 을 float 에 넣을 때 지수승으로 바뀔 수 있음 --> 메모리 구조가 달라서 값이 날아가는 것 같음. ex. long startX = (m_Size) * -1; ulong startGap = 0; float posX = startX + startGap;

  6. 2023.03.03 MFC 윈도우 창 분할 시 에러날 때

    윈도우창 분할할 때 빨간 에러박스 뜰 때 하위로 넣을 창의 속성이 child 인지 확인해볼 것.

  7. 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..

  8. 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..

  9. 2022.10.23 [C] 문자열 상수

    char *test = "abcdef"; 와 char test[] = "abcdef";의 차이점 두 가지의 차이를 이야기 하기에 앞서서 "abcdef"에 대해 짚고 넘어갑시다. "abcdef"란 코드는 컴퓨터가 프로그램을 메모리에 로드할 때 읽기 전용 메모리에 로드되는 문자열 상수입니다. 문자열 상수의 주소란 말이죠. 참고로 읽기 전용 메모리에는 프로그램 코드 라던가 상수가 로드 됩니다. 그럼 돌아와서 문자열 상수 주소를 char *test인 포인터에 넣느냐 아니면 char test[]인 배열에 넣느냐가 차이점 이군요. 둘의 차이는 다음과 같습니다. 1. char *test = "abcdef"; - 포인터에 문자열 상수를 할당합니다. 따라서 문자열을 참조 할 수는 있지만 값을 바꾸지는 못합니다. 문자열이..

  10. 2022.06.20 [UE] UINTERFACE 와 FORCEINLINE

    UINTERFACE C++ 인터페이스인데 언리얼 오브젝트임 uclass 매크로를 사용 등.. cdo나 클래스 계층 정보를 가지고 있음 FORCEINLINE 길지않은 함수일 경우 인라인으로 써주는게 좋다 ( return bool 같은 한 줄짜리 함수 ) 크거나 복잡한 태스크를 수행하는 함수의 경우 함수 호출의 오버헤드는.. 함수가 실행되는데 걸리는 시간과 비교할 때 중요하지 않다. 그러나, 일반적으로 사용하는 작은 함수의 경우 함수 호출에 필요한 시간이 실제로 함수 코드를 실행하는데 필요한 시간보다 훨씬 많은 경우가 있다 ( 배보다 배꼽이 큰 경우 ) 이로 인해 성능 저하가 일어날 수 있음 인라인 함수로 만들게 되면.. 함수 호출이 자체의 내용이 복사본으로 대체되어 함수 오버헤드가 발생하지 않는다. ( 함..