⭐ Programming/C++
[C++] 얕은 복사 vs 깊은 복사 1
[C++] 얕은 복사 vs 깊은 복사 1
2022.04.09얕은 복사 vs 깊은 복사 1 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 목차 기본 #include using namespace std; class Pet { public: Pet() { cout
[C++] 타입 변환 4: 포인터
[C++] 타입 변환 4: 포인터
2022.04.09타입 변환 4: 포인터 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 공통 부분 #include using namespace std; // 타입 변환 (포인터) class Knight{ public: int _hp = 0; }; class Item{ public: Item() { cout
[C++] 타입 변환 3: 포인터 타입 변환
[C++] 타입 변환 3: 포인터 타입 변환
2022.04.08타입 변환 3: 포인터 타입 변환 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 공통 부분 class Item { public: Item() // 기본 생성자 { cout
[C++] 타입 변환 2: 참조 타입 변환
[C++] 타입 변환 2: 참조 타입 변환
2022.04.08타입 변환 2 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 공통 부분 - Knight, Dog, BullDog class Knight { public: int _hp = 10; }; class Dog { public: Dog() { } // 타입 변환 생성자 Dog(const Knight& knight) { _age = knight._hp; } // 타입 변환 연산자 operator Knight() { return (Knight)(*this); } public: int _age = 1; int _cuteness = 2; }; class..
[C++] 타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환
[C++] 타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환
2022.04.08타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 타입 변환 유형 (비트열 재구성 여부) 1. 값 타입 변환 - 특징) 의미를 유지하기 위해서, 원본 객체와 다른 비트열 재구성 int a = 123456789; // 2의 보수 float b = (float)a; // 부동소수점(지수 + 유효숫자) cout
[C++] 동적 할당: new, delete
[C++] 동적 할당: new, delete
2022.04.07동적 할당: new, delete 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! malloc / free vs. new / delete - malloc / free 함수! - new / delete는 연산자(operator) C++에 추가됨 malloc/free vs new/delete - 사용 편의성: new/delete 승! - 타입에 상관없이 특정한 크기의 메모리 영역을 할당 받으려면? malloc/free 승! 그런데 둘의 가장 가장 근본적인 중요한 차이는 따로 있음! new/delete는 (생성타입이 클래스일 경우) 생성자/소멸..
[C++] 동적 할당: malloc, free, void*, double free, Use-After-Free
[C++] 동적 할당: malloc, free, void*, double free, Use-After-Free
2022.04.07동적 할당 1 (malloc, free) 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 메모리 구조 복습 코드 영역 실행할 코드가 저장되는 영역 데이터 영역 전역(global)/정적(static) 변수 스택 영역 지역 변수/매개 변수 힙 영역 동적 할당 문제 상황 문제 상황 - MM)RPG 동접 1명~5만명, 몬스터 1마리~500만마리 - 몬스터 생성 이벤트 -> 5분 동안 몬스터가 10배 많이 나옴 스택 영역 - 함수가 끝나면 같이 정리되는 불안정한 메모리 - 잠시 함수에 매개변수 넘긴다거나 하는 용도로는 OK 메모리 영역 - 프로그램..
[C++] 객체지향 마무리
[C++] 객체지향 마무리
2022.04.06객체지향 마무리 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! struct vs. class - C++에서는 struct나 class나 종이 한 장 차이다. - struct는 기본 접근 지정자가 public이고, class는 private이다. - 왜 이렇게 했을까? C++은 C언어에서 파생되어 발전했기 때문에, 호환성을 지키기 위함. struct는 그냥 구조체 (데이터 묶음)을 표현하는 용도 class는 객체 지향 프로그래밍의 특징 나타내는 용도 struct TestStruct { int _a; }; class TestClass { i..
[C++] 오버로딩과 오버라이딩의 차이
[C++] 오버로딩과 오버라이딩의 차이
2022.04.06오버로딩과 오버라이딩의 차이 오버 로딩과 오버라이딩의 차이 함수 오버로딩(Overloading)과 오버라이딩(Overriding)은 객체 지향 프로그래밍에서 중요한 개념이다. 함수 오버로딩(Overloading)은 하나의 클래스 내에서 같은 이름을 가진 함수를 여러 개 정의하는 것을 의미한다. 이때 함수의 매개변수의 수나 타입, 반환값의 타입 등을 다르게 정의하여 사용합니다. 이렇게 정의된 여러 개의 함수 중에서 호출 시 전달된 인자와 가장 일치하는 함수가 호출된다. 예를 들어, C++에서 정수형 변수 두 개를 더하는 함수와 실수형 변수 두 개를 더하는 함수를 같은 이름으로 정의할 수 있다. 호출 시 전달된 인자의 타입에 따라 적절한 함수가 호출된다. 반면에 오버라이딩(Overriding)은 상위 클래스..
[C++] 연산자의 오버로딩 (Operator Overloading), 오버로딩 vs 오버라이딩
[C++] 연산자의 오버로딩 (Operator Overloading), 오버로딩 vs 오버라이딩
2022.04.05연사자의 오버로딩 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 목차 연산자 연산자 vs 함수 연산자는 피연산자의 갯수/타입이 고정되어 있다. 연산자 오버로딩 일단 [연산자 함수]를 정의해야 한다. 함수도 멤버함수 vs 전역함수가 존재하는것처럼, 연산자 함수도 두가지 방식으로 만들 수 있다. 멤버 연산자 함수 version 전역 연산자 함수 version 더보기 위의 상황에서는 연산을 할 수 없다. 하지만, 연산자 오버로딩을 하면 Position pos3 = pos + pos2 연산을 할 수 있다. #include using namesp..
[C++] 초기화 리스트
[C++] 초기화 리스트
2022.04.05초기화 리스트 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 초기화를 하는 이유는? - 버그 예방에 중요하다. - 포인터 등 주소값이 연루되어 있을 경우, 유의해야 한다. #include using namespace std; class Knight{ public: int _hp; // 쓰레기 값 }; int main(){ Knight k; cout
[C++] 다형성, 가상함수 테이블, 순수 가상함수, 추상 클래스
[C++] 다형성, 가상함수 테이블, 순수 가상함수, 추상 클래스
2022.04.05다형성 인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다. 😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기! 바인딩(Binding) - 정적 바인딩, 동적 바인딩 바인딩(Binding) = 묶는다. 정적 바인딩(Static Binding) 컴파일 시점에 결정 동적 바인딩(Dynamic Binding) 실행 시점에 결정 일반 함수는 정적 바인딩을 사용한다. 동적 바인딩을 원한다면? 가상 함수(virtual function)를 사용한다. 가상 함수 테이블 ( vftable ) 그런데 실제 객체가 어떤 타입인지 어떻게 알고 알아서 가상함수를 호출해준걸까? - 가상 함수 테이블 (vftable) ...