
인프런 강의 : \[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈 Part1: C++ 프로그래밍 입문]C를 공부한 이후 C++을 해보기로 했다. (객체지향 언어에 대한 더 깊은 이해가 필요하니까 그리고 회사에서 쓴다.)어셈블리어에 대해서는 정글에서 PintOS

기본적인 컴퓨터 구조에 대한 그림1 byte = 1 bit바이트 계산기 사용 방법1\. 1번을 클릭하여 바이트 계산기로 전환한다. 그러면 위 그림과 같이 전체 바이트의 위치에서 0,1로 컨트롤할 수 있는 계산기로 전환된다.2\. 2번을 클릭하면 Byte, Word 등으

접근 속도가 빠름RAM이나 하드디스크는 CPU 계산 중 사용하기에 너무 멀고 속도가 느림64 bit = 8 byte = 4 word = 2 dword = 1 qwordEAX, EBX, ECX, EDX그리고 해당 레지스터를 또 어떻게 쪼개서 쓰는지(ref : CPPRO레

ref : 윈도우 실행 파일 구조 ref : 054. 프로세스 메모리 구조 둘의 가장 큰 차이는 초기화 후 초기값을 같는 변수를 저장하는 공간이냐 아니면 초기화하지 않고 저장하는 공간이냐이다.현대에 와서는 용량이 충분하여 괜찮지만 과거에는 컴퓨터 메모리가 너무 비싸서

데이터를 저장할때 꼭 하나의 값만 입력하지 않아도 된다. 위와 같이 작성 후 저장된 모습을 보면 주소에 차곡차곡 저장된 것을 확인할 수 있다.각각의 글자가 아스키 코드로 변환되어서 저장되어있는 것을 확인할 수 있다.역으로 바꿔서 테스트를 해보면 Hello Wolrd가

사칙연산을 하기 위해서 먼저 input을 받을 수 있어야한다GET_DEC : al에 1바이트를 입력받는다(DEC - 10 진법으로)PRINT_DEC : al을 1바이트 출력한다 (DEC - 10 진법으로).bss section을 보면 num 이라는 변수를 선언해 놓았다

연산시 left, right로 일정 칸만큼 이동하는 연산 방법이다. 어떤 프로그래밍 언어를 사용하더라도 공통적으로 지원하는 부분이니 잘 기억해두도록 하자쉬프트 연산시 주의사항최상위 비트(음수)가 켜져있으면 그대로 유지됩니다.Red box : 논리연산Blue box :

분기문 (if) 특정 조건에 따라서 코드 흐름을 제어하는 것 ex) 스킬 버튼을 눌렀는가? YES -> 스킬 사용 ex) 제한 시간 내에 던전 입장 수락 버튼을 눌렀는가? Yes -> 입장, No -> 던전 취소 분기문과 반복문으로 코드의 대다수를 만들 수 있다
반복문은 분기문과 같이 가장 많이 쓰이는 부분이다. 단순 반복 혹은 조건확인 등을 여러번 반복해야할때 사용한다. 처음 ecx에 10을 부여하고 ecx의 값은 dec ecx를 통해 1씩 감소한다. 해당 방법으로 반복문을 진행한다.

배열을 선언하는 방법은 여러가지가 있다.여기서 사용한 방법은 두가지이다.1\. 값을 나열해서 적용2\. times를 이용하여 동일한 값을 배열에 전부 적용a db 0x01, 0x02, 0x03, 0x04, 0x05 의 경우 값을 1~5까지 순서대로 넣은 배열을 생성한다
어셈블리에서는 함수라는 표현을 잘 사용하지 않는다.주로 프로시저와 서브루틴이라고 표현한다. 하지만 해당 강의의 목표는 C++이기 때문에 함수로 표현한다.기본적으로 함수를 사용하는 이유는 반복적으로 일어나야하는 계산, 특정 조건에 맞는 값을 출력 등을 위해 사용한다.아래

스택은 데이터를 저장하고 이해하는데 중요한 부분이다.아래 그림을 참고해보자딩굴딩굴고양이스택 프레임함수를 호출하고 종료함에 따라 쌓였다 제거됐다 한다. 중요한건 높은주소에서 낮은 주소 방향으로 쌓인다는 것이다.doorbals_512.logrip는 주황색 줄을 의미한다 :

정수는 프로그래밍을 하면서 가장 많이 사용하게 될 타입이다.C++에는 signed와 unsigned가 있다.그리고 char, short, int, \_\_int64(long long) 자료형이 있고 해당 자료형은 byte의 크기마다 다르다.signed 는 자료형을 선언
크기 : 1바이트사용처 : True or False참/거짓은 위처럼 int형도 사용 가능하다. 하지만 메모리 낭비이기 때문에 bool을 사용한다. (그러면 1bit를 사용하지 않고 1byte를 사용하는 이유는? --> 1bit만 가져오는건 없다. 최소 단위가 1byte
이번 VScode를 사용하며 겪은 에러이다.. Locale errorterminate called after throwing an instance of 'std::runtime_error' what(): locale::facet::\_S_create_c_locale

오늘 할 내용은 문자와 문자열이다.Bool type은 정수지만, 참/거짓을 나타내기 위해 사용했다Char type도 마찬가지, 정수지만 '문자' 의미를 나타내기 위해 사용한다.char : 알파벳/숫자 문자를 나타냄wchar_t : 유니코드 문자를 나타냄유니코드 사용이
크게 부가설명이 필요한 부분은 없을 것으로 보인다.아래 부분만 다시 한번 확인하고 가자.a++과 ++a의 차이a++은 a를 실행한 이후에 ++가 동작한다. 즉 b=a++;이면 b=a를 넣고 a+1을 실행한다. ++a는 ++가 동작 후 a가 동작한다. 즉 b=++a;이면

중요한 설명은 따로 없었습니다. 더 많은 종류의 연산자들이 존재하니 아래 링크를 참조해주세요.ref : 위키백과너무 오랜만에 강의를 봤다 주에 3~4회를 보려하였지만, 개인적으로 우선순위에 놓인 일들이 많았다. 다시 하나씩 정리하고있고 틈틈히 강의를 보고 정리하겠습니다
강의에서는 비트연산자를 자주 사용하지 않는다고 하였지만, 회사에서 코드를 보다보면 생각보다 자주 보게된다.가장 중요한 부분은 01 두 개만을 나열하여 특정 의미를 부여할 수 있다는 부분이다.또한, 비트마스킹을 통해서 의미를 분석할 수 있게된다.앞으로 자주 사용하며 코드
반복문의 종류1\. while (조건) {내용} -- 조건을 만족하면 내용을 반복한다2\. do{내용} while(조건) -- 먼저 1회 실행후 조건을 만족하면 다시 반복한다3\. for (초기화; 조건식; 제어식){내용} -- 값을 초기화후 조건을 만족하면 내용이 동
별찍기 1, 2, 3구구단
가위바위보 게임을 만들어보자 승률을 추가하자 답안은 switch를 사용하였으나 switch 함수를 사용하면 코드가 너무 길어보여 다른 방법으로 사용하였습니다. 두 가지 방법을 모두 첨부합니다. 수정방안이 저의 최종 답안입니다. 문제를 조금 더 발전시켜보았습니다. in
enum과 \`\`#define은 말그대로 뒤에 오는 부분을 대체만 하는 것이라는 것을 기억하기.
함수의 가장 중요한 내용input 으로 무엇을 받고, output으로 무엇을 뱉을지 정해준다.반환타입 함수이름(){ 함수 내용 return \~~;}

error cpp compiler는 위에서부터 아래로 컴파일러를 함. 그런데, Func1을 컴파일러 하는 도중 Func2에 대해서 물어보니 식별자를 찾을수 없다고 하는것. (Func3도 동일).해결된 코드함수 선언을 미리 해놓았기 때문에, Func1을 실행하면서 Fun
애초에 함수 이름을 똑같이 짓지 않도록 하자.
이번 시간에는 간단한 text PRG를 짜는 방법에 대해 공부하였다.함수와 함수간의 호출 --> 지난 시간에 배운 호출스택과 관련.이를 통해 함수 수업에서 배운 부분을 복습하는 과정이었다.추가적으로 배운 부분은구조체 부분이다.처음에는 아래 주석처리 된 것처럼 사용하였다

주소를 비교해보자&number&ptr값을 비교해보자int value 의 경우 ptr의 값만을 가져오게됨value1의 주소를 확인하면 ptr과 관련이 없는 것을 확인할 수 있게됨하지만 값은 1이 할당됨\*ptr을 통해 값을 변경하게되면 number에도 영향을 미침

int number로 선언되어있었기 때문에 \_\_int64\* 와 타입이 불일치 하여 아래와 같은 에러가 발생함이를 해결하기 위하여 (\_\_int64\*) 로 캐스팅을해줌그러면 이제 아래와 같은 이슈가 발생하게됨 기존의 4바이트의 영역을 넘어 bbaa가 저장되게됨아

포인터 연산2번 산술연산자 Before | After|
포인터 실습포인터를 사용했을때와 하지 않았을때의 차이를 분명히 알고 가자

Reference (참조)C++의 참조 방법에 대해서 알아보자포인터는 \*를 사용했다면 참조는 &를 사용한다아래 사진을 보면 알수있는 것처럼 참조를 사용하면 number의 값을 직접 바꿀수있다.위 주석에서 보았듯이 포인터와 참조는 앞의 표기와 동작의 방법만 다를뿐 (.

포인터 vs 참조참조는 늘 값이 존재해야함. 그래서 아랫줄 처럼 info를 할당해주면 정상적으로 동작하게 됨

포인터와 마찬가지로 아주 중요한 개념c-1 배열이 어떻게 값을 저장하는지 확인해보자아래 그림처럼 10개가 나열되어 저장되어있는 것을 알 수 있다c-2 강의 내용 요약배열 선언배열 초기화배열 접근을 위한 index
포인터와 배열의 차이점포인터는 크기가 8바이트 (64bit 기준)배열은 들어오는 데이터의 크기만큼데이터 배열에 담을때는 4바이트씩 데이터의 끝까지 담음배열을 다른 함수에 넣을때는 배열의 첫 주소값이 이동함
const char\* 등 값을 수정할 수 없게 막힌 pointer에 접근하기 위해서 이중 포인터 등을 사용합니다이중포인터는 주소1 -> 주소2 -> value로 접근한다

1)과 2)은 code의 모양은 다르지만 저장된 형식으로는 완벽히 동일함. (왼쪽 1, 오른쪽 2)
포인터는 주의해서 써야한다특히 메모리와 관련하여 잘 고민하고 사용할것
포인터를 넘길때, 참조를 사용할때, 배열을 넘길때를 잘 구분해보자
문자열과 관련된 함수들을 실제로 만들어보면서 포인터를 더 사용해보자문자열과 관련된 함수문제1~4 까지 사용된 것들은 자주 사용하니 잘 기억해야함strlen, strcmp, strcat, strcpy
숫자를 입력받고(N) 해당 숫자의 크기에 해당하는 테이블을 만든 후 (NxN) 순회하며 숫자를 채우는 달팽이 모양을 만들어라ex)input = 501 02 03 04 0516 17 18 19 0615 24 25 20 0714 23 22 21 0813 12 11 10 0
모든 코딩을 한 페이지 안에서 끝나면 추후 코드를 수정할때 너무 복잡하게됨그를 해결하기 위하여 파일을 분할관리하여아함파일을 분할관리할때는 \*.h 를 이용하여 하면 더 깔끔하게 할 수 있고 compiler 할때 보다 안전하게 할 수 있음.
절차 지향은 만들어진 모든 함수를 순서대로 타고 간다면객체 지향은 하나하나의 object가 주를 이룬다고 보면된다.
생성자와 소멸자클래스가 실행될때는 무조건 제일먼저 생성자가 동작하고클래스가 끝날때는 무조건 소멸자가 동작한다.
명시적 선언과암시적 선언에 대해 구분해야한다타입 변환 생성자 -> 인자를 1개만 받는 기타 생성자타입 변환의 용도로 쓰고 싶지 않다면 앞에 explicit 를 붙이자

상속성 코드를 재사용하기 위해서 사용여러 클래스에서 동일하게 사용되는 함수와 변수들을 재사용하기 위해 사용할 수 있음
public : 누구나 접근 가능protected : 나 + 나의 자손 접근 가능private : 나만 사용 가능
다형성의 중요점1\. 오버로딩2\. 오버라이딩3\. 바인딩4\. 가상함수 테이블5\. 순수 가상함수7\. 추상클래스
초기화 하지 않았을때의 값이 아래처럼 나타나게됨 알수없는 쓰레기 값이 들어가있음. | |
new/delete 연산자new\[]/delete\[] 연산자malloc 과 new의 차이

타입변환의 다양한 종류와 방법에 대해서 배움결과값코드를 실행시 아래 에러가 발생하고 있음내가 가진 컴파일러 버전은 \_MSC_VER: 1936\_MSC_FULL_VER: 193632535임.확인 방법은 아래 코드를 사용 (visual studio 2022)컴파일러 버전
결과
shallow copydeep copy
객체를 '복사' 한다는 것은 두 개개체의 값들을 일치시키려는 것따라서 기본적으로 얕은 복사(shallow copy) 방식으로 동작명시적 복사 -> 모든 책임을 프로그래머한테 위임하겠다는 의미
1) static_cast - 타입 원칙에 따라 상식적인 캐스팅2) dynamic_cast - 상속 관계에서 안전한 캐스팅 지원3) const_cast - const를 붙이거나 제거하기 위해4) reinterpret_cast - 포인터, 다른 타입 등 전혀 관계 없는

source file 내부에 보면 폴더별로 정리되어 트리모양의 구조를 갖고 있는 것으로 보이지만, 가상의 트리일 뿐 실제로는 해당 프로젝트가 있는 폴더 안에 다같이 우르르 들어있음.순환구조 : A 파일에서 B 파일을 include하고 B파일에서 A 파일을 include