본문 바로가기

C++197

[C++] Chapter 06. 함수 포인터 포인터라는 건 주소를 담는 바구니. int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int main() { int a = 10; typedef int DATA; // 1) 포인터 * // 2) 변수이름 pointer // 3) 데이터 타입 int DATA* pointer = &a; // 함수 (고전적인 방식) typedef int(FUNC_TYPE)(int, int); // mordern C++ using FUNC_TYPE = int(int a, int b); // 1) 포인터 * // 2) 변수이름 fn // 3) 데이터 타입 함수 (인자는 int, int. 반환은 int) FUNC_TYPE* fn; // 함.. 2023. 5. 12.
[C++] Chapter 05. 크러쉬가 나는 오작동 현상 case by case 정수가 오버플로우 0을 나누기 재귀함수를 호출해서 스택 오버플로우 소멸자에 virtual을 쓰지 않아 memory leak이 일어났다 nullptr로 밀어주지 않아 double-free 이미 삭제된 애를 다시 사용하는 use-after-free 2023. 5. 12.
[C++] Chapter 04. 객체지향 여행 객체지향의 시작 💡 절차(procedural)지향 프로그래밍 procedure = 함수 어떤 절차를 지켜야된다의 절차라기 보다는 함수기반이 메인이되는 프로그래밍 방식 C++도 객체지향 프로그래밍이냐? 애매하다 C++에서 C에서 파생되어서 여러 문법들이 추가되면서 생겼다보니까 엄밀히 말해 혼혈화 같은 느낌이다. // 데이터 + 가공(로직, 동작) // 객체지향 = 객체 // 객체란? 플레이어, 몬스터 GameRoom 생성자와 소멸자 // 클래스에 ‘소속’된 함수들을 멤버 함수라고 함 // 이 중에서 굉장히 특별한 함수 2종이 있는데, 바로 [시작]과 [끝]을 알리는 함수들 // - 시작(탄생) -> 생성자 (여러 개 존재 가능) // - 끝(소멸) -> 소멸자 (오직 1개만) 소멸자는 main 함수가 끝난.. 2023. 5. 12.
[STL] 범용 수치 알고리즘(accumulate, inner_product) accumulate 지정한 구간에 속한 값들을 모든 더한 값을 계산한다. 기본적으로 더하기 연산만 하지만 조건자를 사요하면 더하기 이외의 연산도 할 수 있다. accumulate를 사용하기 위해서는 앞서 소개한 알고리즘과 다르게 헤더 파일을 포함해야 한다. inner_product 두 입력 시퀀스의 내적을 계산하는 알고리즘으로 기본적으로는 +와 *을 사용한다. 두 입력 시퀀스의 값은 위치의 값을 서로 곱한 값을 모두 더한 것이 최종계산 값이 된다. 주의해야 할 것은 두 입력 시퀀스의 구간 중 두 번째 시퀀스는 첫 번째 시퀀스 구간 보다 크거나 같아야 한다. 즉 첫 번째 시퀀스 구간의 데이터는 5개가 있는데 두 번째 시퀀스에 있는 데이터가 5개 보다 작으면 안된다. 2023. 5. 12.
[Programmers] Lv 2. 최솟값 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/12941?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include #include #include #include using namespace std; int solution(vector A, vector B) { sort(A.begin(),A.end()); sort(B.rbegin(),B.rend()); return inner_product(A.begin(), A.end(), B.begin(), 0); } GitHub :.. 2023. 5. 12.
[C++] Chapter 03. 포인터#2 (포인터 vs 배열) 배열 기초 배열의 크기는 상수여야함. (VC 컴파일러 기준. 다른 컴파일러는 상수값이 아니여도 통과될 수 있음) 배열의 이름은 배열의 데이터가 아니라 배열의 시작주소이다. (첫번째 시작주소) 정확히는 시작 위치를 가리키는 TYPE* 포인터이다. 포인터 vs 배열 const char* test1 = “Hello World”; char test2[] = “Hello World”; 둘이 비슷하게 설정된다는 점에서 포인터와 배열이 똑같아보인다고 하지만 이는 전혀 다르다. (둘이 어셈블리 코드도 다름) test1 = “Hellow World”; .data 주소[H][e][l][l][o][][W][o][r][l][d][\0] readonly 데이터임 test1[ 주소 ] char*) 즉 배열의 내용 전체를 넘긴게 .. 2023. 5. 11.
[C++] Chapter 02. 포인터#1 (기초, Reference) 포인터 기초 #1 포인터를 사용하기 전 사용한 방식 int number = 1; number라는 이름의 4바이트 정수 타입의 바구니를 만든다. number라는 변수 스택 메모리에 할당 number = 1라 함은, number 바구니에 1이라는 숫자를 넣으라는 의미. 따라서 스택 메모리에 있는 특정 주소(number 바구니)에 우리가 원하는 값을 넣은 셈 number는 비유하자면 메모리에 이름을 붙인 것 (찰떡같이 알아들어서) 나쁘지 않고 편리한데, 단점은 원본 수정이 불편하다. 포인터는 바구니는 바구니인데.. [주소를 저장하는 바구니]다. 참고) 포인터는 개발환경이 64비트 32비트냐에 따라 8바이트 4바이트 고정 크기로 설정된다. int value 1 = *ptr 이걸 디스어셈블리로 보면 💡 00344.. 2023. 5. 11.
[C++] Chapter 01. 함수 스택 프레임 int result = MultiPlayBy(b, a) 라고 한다면, 어셈블리 언어로 까보면 오른쪽부터 a를 먼저 push해준다. 지역 변수와 값 전달 데이터 영역에 .rodata, .data, bbs 세가지 영역이 있었음. 초기화 여부, const 등 세부사항에 따라 각 영역에 할당됨 호출스택에서 스택프레임이 구성되는 건 [매개변수][RET][지역변수] 사실 스택이란거 자체는 처음부터 충분히 큰 공간을 할당을 해놓고 시작을 한다. 거기서 각기 함수들이 원하는 영역만큼을 찝어가지고 사용한다. [매개변수][RET] 세팅은 이전 함수에서 정해서 넘겨주게 된다. 지역변수는 온전히 자기 자신이 제어한다. void IncreaseHP(int hp) { int finalHP = hp + 1; } // .. 2023. 5. 11.
[Technical Organize] Effective C++_#define #defnie 상수는 다음과 같은 단점이 있다. 1) 전처리기에서 처리된다. 즉 컴파일러에서 제어할 수 없으니 데이터 타입 검증이 되지 않는다. 특히 매크로 인자의 경우, #define은 인자의 타입을 지정하지 않기 때문에 의도하지 않은 결과를 만들어내기도 한다. 예를 들면, 소수로 (float)받으려는 의도였는데, 호출하는 쪽에서 정수 (int)로 입력해서, 4/3이 1의 결과가 나오는 일이다. 왠만하면, 컴파일러가 이해할 수 있는 형태로 코드를 작성하는게 안전하다. 2) 매번 코드가 복사되기 때문에, 실행 코드 크기가 늘어난다. 매크로 함수는 모두 치환으로 바뀌기 때문에 inline함수와 유사하게 동작한다. 다만, 이를 의도한 거라면 차라리 inline을 쓰는게 낫다. #define 매크로는 인자 개.. 2022. 12. 28.
[Game Project - 3D Team] Nier Automata (핵 앤 슬래시) [DirectX 3D - Team Project] 니어 오토마타 동영상(Client) : https://www.youtube.com/watch?v=51SftHxQRdQ 동영상(Tool) : https://www.youtube.com/watch?v=SsG11WXrBy0 장르 : 핵 앤 슬래시 날짜 : 2020.01.01 ~ 2020.03.01 인원 : 3명 (담당 파트 : Animation Tool, 플레이어, 몬스터, 카메라, 충돌) 개발 환경 : Visual Studio 2015 (x64) 개발 언어 및 도구 : C++, MFC, DirectX9, HLSL GitHub : https://github.com/developeSHG/GAME-Nier_Automata 디자이너가 만든 메쉬의 로컬 움직임을 그대.. 2022. 12. 21.