전체 글 131

#39. 생성자 & 소멸자

*this 포인터 : 해당 클래스 자신 => lea ecx, [k1] , 즉, k1 의 주소가 ecx 에 복사가 되는것을 볼 수 있음. 그런다음, mov dword ptr [this], ecx => [this] 포인터 에 ecx 값을 복사하는 것을 볼 수 있음. => 해당 this 주소를 이용하는 것을 볼 수 있음. => 지금 class 멤버변수 선언순서는 _hp _attack _posY / _posX 순이고 만약, _attack = 1000; 을 실행 시, mov dword ptr[ eax+4 ], 3E8h 주소값을 4byte 옮겨 데이터 복사시킴. *생성자 ( Constructor ) => 여러 개 존재 가능 *암시적 생성자 => 생성자를 명시적으로 만들지 않으면, 아무 인자도 받지 않는 [기본 생성..

프로그래밍/C++ 2022.07.19

#38. 객체지향의 시작

*객체지향 / 절차 지향 프로그래밍 *Knight 를 설계해보자. - 속성( 데이터 ) : hp, attack, position - 기능 ( 동작 ) : 이동, 공격, 죽음.. *Instantiate : 객체를 만든다!! (선언, 생성..) *멤버변수 / 멤버함수 *클래스 선언 시, 멤버함수는 메모리에 잡히지 않음. *struct & class 와 차이점 ?? => 접근 지정자 차이. 본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다. 강의 듣기 !!

프로그래밍/C++ 2022.07.19

#37. 파일 분할 관리

*header 파일 : 선언부 분리한 곳 *#include : 전처리문법 , 해당 파일을 복붙하는 기능 *pragma once : 중복된 선언 방지. #ifndef _TEST1_H__ => (정의되지 않았다면,) #define _TEST1_H__ => (정의를 해라. ) ~~~ #endif => #pragma once 와 비슷한 기능 하지만, 만약 같은 이름의 정의 (위에선 _TEST1_H__ ) 가 두 번 등장하게 되면 '한번' 만 적용됨. ( ifndef 이 통과되지 못함. ) *헤더파일은 최대한 간단하게 유지시키는게 중요. => 헤더파일에 #inlcude 는 피해야 좋다. => cpp. 에서 불러서 사용 #include 는 단순하게 그냥 [해당 내용을 그대로 복붙하겠다]는 의미 cpp에도 동일한 파..

프로그래밍/C++ 2022.07.19

#34. 다중 포인터

*다중포인터는 어떤 상황에 필요할까 ?? void SetMessage(const char* a) { a = "Bye"; } const char* msg = "Hello"; SetMessage(msg); cout "Hello" => 이유는 ?? a 는 함수내부의 복사본 , 복사본에 "Bye" 의 주소를 넣은 것이기 때문에 실질적인 msg 에는 영향이 없음. *그렇다면 어떻게 해야할까?? => 포인터의 포인터 즉, 포인터의 주소를 저장할 수 있는 포인터를 매개변수로 받는다. @.rdata Hello주소 => 리터럴 상수이기 때문 const char* msg = "Hello"; SetMessage(&msg); cout

프로그래밍/C++ 2022.07.19

#33. 포인터 & 배열

*문자열 = 문자의 배열 cout 단지 주소 저장 const char* Test1 = "Hello World"; // .rodata char Test2[] = "Hello World"; 1. 포인터의 경우 리터럴상수의 주소를 rax 에 저장 [Test1] 에 주소를 넣어준다. 2. 배열의 경우 Hello world 리터럴 상수가 저장되어있는 곳과 [Test2] 값을 구하고 각각 rdi, rsi 레지스터에 넣고 rep movs byte prt [ rdi ], byte ptr [ rsi ] rsi 에 있는 값(리터럴상수) 을 rdi ( [Test2] ) 의 값으로 '복사' 한다. 즉, 포인터와 배열은 엄연히 다르다. 본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다. 강의 듣기 !!

프로그래밍/C++ 2022.07.19

#32. 배열기초

*배열 ( Array ) => 배열의 크기는 상수이어야만 함 ( VC 컴파일러기준 ) StatInfo Players[10]; StatInfo Monsters[10]; Players = Monsters => (X) => 배열의 이름은 무엇이되는가 ?? => 첫번째 시작 주소. => 정확히는 시작 위치를 가리키는 'TYPE 크기' 를 알고 있는 포인터 auto Monster_0 = Monsters; => Monster_0 의 타입은 무엇일까?? Monsters 는 배열이름으로 주소이므로, 해당 타입의 * 변수가 됨. *배열의 포인터연산 StatInfo& Monster_Ref1 = (*Monsters); Monster_Ref1.hp = 1; StatInfo& Monster_Ref2 = *(Monsters + ..

프로그래밍/C++ 2022.07.19

#31. 참조 & 포인터

*참조 vs 포인터 성능 : 똑같음 !! 편의성 : 참조 > 포인터 1. 편의성 관련 편의성이 좋다는게 꼭 장점만은 아니다. 포인터는 주소를 넘기니 확실하게 원본을 넘긴다는 힌트를 줄 수 있는데, (명시적) 참조는 자연스럽게 모르고 지나칠 수도 있음. ex) 마음대로 고친다면 ?? const 사용 -> (const StatInfo& info) 포인터도 const 사용 가능. * 기준으로 앞에 붙이냐 / 뒤에 붙이냐 에 따른 차이 (const StatInfo* info) = (StatInfo const* info) => 데이터를 수정할 수 없음. (StatInfo* const info) => 주소를 수정할 수 없음. 2. 초기화 여부 참조 타입은 바구니의 2번째 이름 (별칭) -> 참조하는 대상이 없으면 ..

프로그래밍/C++ 2022.07.19