C++/기초

· C++/기초
람다(lambda) 람다 표현식. 정말 유용하게 사용할 수 있는 문법이다. 오른쪽 참조는 새로 추가된 문법으로 C++의 속도를 향상 시킬 수 있는 문법인것에 반면 람다는 굳이 사용하지 않더라도 지금까지 배운 내용으로도 대신할 수 있는 문법이다. 람다를 다르게 말하면 함수 객체를 빠르게 만드는 문법이다. #include #include #include using namespace std; enum class ItemType { None, Armor, Weapon, Jewelry, Consumable, }; enum class Rarity { Common, Rare, Unique, }; class Item { public: Item(){} Item(int itemId, Rarity rarity, ItemTy..
· C++/기초
오른값 참조(rvalue reference) c++11에서 가장 유의미한 변화를 준 것은 오른값 참조이다. 코드의 속도가 달라질 정도로 많이 변화가 되었다. lvalue는 단일식을 넘어서 계속 지속되는 개체를 의미하고 rvalue는 lvalue가 아닌 나머지를 의미한다.(임시 값, 열거형, 람다, i++ 등) #include using namespace std; class Knight { public: public: int _hp = 100; }; // 불필요한 복사가 일어남, 원본 객체 수정 불가 void TestKnight_Copy(Knight knight) { // TODO } // 불필요한 복사가 일어나지 않음. 원본 객체 수정 가능 void TestKnight_LValueRef(Knight& k..
· C++/기초
using c++11에서 typedef를 대신해서 사용할 수 있는 문법으로 using을 추가한 것이 결론이다. using을 typedef에 대신해서 사용하는 이유를 알아보자. typedef int id; using id2 = int; // 1) 직관성 // 함수 포인터 typedef void(*MyFunc)(); using MyFunc = void(*)(); // 2) 템플릿 template typedef vector vec; // 에러 템플릿이랑 같이 사용 불가 template using Vector = vector; // 템플릿 지원 enum class scoped enum이라고도 불린다. enum class는 이름 공간을 관리할 수 있다는 장점이 있다. enum PlayerType { Knight,..
· C++/기초
이번 포스팅부터는 C++11에 추가된 여러 문법들에 대해 공부해 보겠다. 더보기 C++11 부터 Modern C++이라고 한다. 그 만큼 많은 변화가 있었다. 꼭 알아두어야 한다. auto auto 키워드는 우리가 변수를 선언할 때, 지정해준 자료형 대신 사용할 수 있다. 자동으로 컴파일러가 자료형을 추론해서 자료형을 지정해 주는것이다. #include using namespace std; class A { }; int main() { int a = 3; float b = 3.2f; A c = A(); const char* e = "asd"; // 컴파일러가 오른쪽 값을 보고 자동으로 추론 auto a = 3; auto b = 3.2f; auto c = A(); auto e = "asd"; return ..
· C++/기초
지금까지 포스팅한 vector와 list는 시퀀스 컨테이너, 데이터가 삽입하는 순서대로 나열되는 형태를 가졌다. 그 중 나머지 하나인 deque에 대해 알아보자. deque double-ended queue를 말한다. 실제로 많이 사용하는 경우는 크게 없다. 간단한 원리만 알아보도록 하자. vector와 list를 합쳐놓은 STL이라고 생각할 수 있다. 동적 배열로 배열이 생성되고 그 영역을 넘어가게되면 새로운 영역을 만들어서 데이터를 추가한다. 그리고 이전 영역에서 새로운 영역을 가리켜서 동작한다. #include #include #include using namespace std; int main() { deque dq; dq.push_back(1); dq.push_front(2); cout
· C++/기초
vector랑 양대산맥중 하나. vector와 list는 매우 유사해서 list를 자주 사용하기보다는 다른 자료구조를 이해하는 발판으로써 포스팅을 한다. List 동작 원리 vector는 동적 배열로 이루어진 컨테이너였다. 연속적인 메모리를 할당받아 증설하는 형식이었다. list는 이중 연결리스트이다. 즉, 데이터가 저장된 메모리가 연속적인 메모리가 아니라는 것이다. 다음 노드가 어디에 있는지를 각자 저장한 형태이다. 노드의 포인터로 서로를 가리키고 있는 것이다. vector에서 데이터를 중간에 추가하고자 하면 데이터가 연속적으로 존재해야하기 때문에 결국 값을 전부 복사해야한다. 하지만 list의 경우 중간에 낄 노드 양 옆에 포인터를 조작하면 바로 가능하다. 이는 데이터가 연속적으로 존재하지 않기 때문..
· C++/기초
정말정말 중요한 내용이다. STL은 Standard Template Libaray이다. 프로그래밍 할 때 필요한 자료구조/ 알고리즘들을 템플릿으로 제공하는 라이브러리이다. STL에 대해 공부하기 전에 여러 용어에 대해 알아야한다. 컨테이너(container) 우리가 이전에 여러 데이터를 저장하는 방법으로 배열 방식이외의 방식은 없었다. 컨테이너는 데이터를 저장하는 객체 즉 자료구조 Data Structure인 것이다. 이 컨테이너중 하나인 Vector에 대해 다뤄보겠다. Vector 벡터의 원리에 대해 정확히 알고 있어야한다. 1. vector의 동작 원리 (size/capacity) 2. 중간 삽입/삭제 3. 처음/끝 삽입/ 삭제 4. 임의 접근 vector를 알기 전 그전에 사용했던 배열에 대해 생각..
· C++/기초
함수 객체 함수 객체(Functor), 함수처럼 동작하는 객체 함수 포인터의 단점이 있었다. 그 시그니처와 동일하지 않은 함수는 사용할 수 없다는 점이다. 또, 상태를 가질 수 없다는 점이 단점이다. 클래스에는 데이터와 함수를 동시에 가질 수 있다. hp가 100 이라면 100이라는 상태를 가지고 있는 것이다. 함수처럼 동작 하는 객체가 함수 객체이다. () 연산자 오버로딩이 필요하다. #include using namespace std; class Func { public: void operator()() { cout
· C++/기초
STL의 공부하기 위헤서 필수적으로 알고 있어야한다. 함수 포인터 포인터는 주소를 담는 바구니 이다. int* pointer = &a; 포인터라는 것을 알려주기 위해 * 를 사용하고 변수 이름은 pointer 이다. 데이터 타입은 int인 것이다. 지금까지 우리가 사용한 데이터 타입은 기본 타입 들과 우리가 제공한 class 나 struct 등을 사용했지만 이것 이외에도 바로 함수 타입이다 #include using namespace std; int Add(int a, int b) { return a + b; } int main() { // 함수 포인터 // int 2개를 받아 int 하나를 반환하는 시그니처 함수 typedef int(FUNC_TYPE)(int, int); // 1) 포인터* // 2)..
· C++/기초
이번 포스팅은 지금까지 배운 내용으로 TextRPG를 만들다가 느낀 C++에 관한 내용을 적어보려고 한다. 전방 선언 이전 포스팅에서 글로만 다뤘던 내용인데, 이 부분이 익숙하지 않았다. 그래서 Player 클래스와 Item 클래스가 각기 다른 Player.h, Item.h 파일에 이렇게 있다고 해보자. Item.h #pragma once #include "Player.h" class Item { public : void UseItem(const Player* player); }; Player.h #pragma once #include "Item.h" class Player { public: Item* _item; }; 위 코드는 플레이어가 아이템을 가지고 있고, 그 아이템은 능력을 사용하기 위해서 사용..
Mintriever
'C++/기초' 카테고리의 글 목록