월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
vector 메모리영역
vector<int> v; vector 메모리를 까보니까 힙영역인거같은대 맞나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
디버깅 문제풀이#3 10번문제 질문있습니다
for (int i = 0; i < 10; i++) { arrows[i]->AttackTarget(); // 기사가 죽었으면 소멸시켜준다 if (knight != nullptr) { if (knight->IsDead()) { delete knight; knight = nullptr; } } delete arrows[i]; arrows[i] = nullptr; }이부분에서 나이트를 delete 하고 nullptr 로 채우고나서 애로우 부분에// 공격 대상이 있다면 if (_target != nullptr) { // 데미지를 입힌다 target->AddHp(-damage); _target->PrintInfo(); }_target을 nullptr 체크했는대 구문으로 왜 들어오는건가요..?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
현업 visualstudio stl vs EA STL
안녕하세요 공부하다가 궁금한게 있어서요 stl을 잘활용해야한다고 하셨는데 초심자지만 감히 호기심 차원에서 질문을해봅니다..! (따지는건 절대아닙니다! 그냥 학습차원에서 궁금해서요!)제가 주워 듣기론 EA STL이 좀더 게임개발에 맞춰 기존 stl을뜯어고친 STL이라서 성능향상에 좋다는 소리를 들었고visualstudio 에서 제공하는 stl같은 경우는 정확히 뭐가 안좋다는 건진 모르겠지만 좋지는 않다고 하더라구요강사님 생각은 어떤지 궁금해서 물어봐요..!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
push_back, 이동생성자 질문
class Person { public: Person(string name) { this->name = name; cout << "기본 생성자 " << name << endl; } Person(const Person& p) { this->name = p.name; cout << "복사 생성자 " << this->name << endl; } Person(Person&& p) noexcept { this->name = p.name; cout << "이동 생성자 " << p.name << endl; } ~Person() { cout << "소멸자 호출 " << this->name << endl; } public: void operator = (Person&& p) { cout << "이동 대입 " << p.name << endl; } void operator = (const Person& p) { cout << "복사 대입 " << p.name << endl; } public: string name; }; std::vector<Person> v; int main() { ios_base::sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL); v.push_back(Person("Kim")); v.push_back(Person("Lee")); Person p1("NY"); v.push_back(p1); return 0; } 위처럼 실행시 Kim에 대한 임시객체 생성 -> vector에 넣을 데이터 이동 생성자로 생성 -> 임시객체 해제(소멸)순으로 진행될라 생각하여 디버깅 한 결과 제 생각과 맞은듯 하였습니다.위처럼 생성자들이 호출이 되었고 그다음에 "Lee"임시객체를 생성하고 push_back하는 경우 똑같은 과정대로 push_back될거같았는데 그러지가 않고위처럼 기본생성자 호출 (임시객체) -> 이동생성자 호출 (벡터에 넣을 데이터 noexcept최적화 ) -> 이동생성자 호출?...(여기서 임시객체에 대한 소멸자가 호출되어야 한다고 생각했습니다)여기서 부터 멘붕이 왔는데 제가 지금 std::vector의 push_back멤버 함수의 동작방식을 제대로 알지 못하는 것인지와왜 Lee에 대한 이동생성자가 호출되고나서 Kim이라는 변수를 가지는 이동생성자가 한번 더 호출되는지 모르겠습니다 그것도 Person("Lee")를 v에 push_back하는 상황에서요..
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
map을 공부하던중.. m.insert(pair<int, int>(i, i * 100));
안녕하세요. 오늘 map 을 공부하던중..pair<int,int>(i,i*100) -> 이 부분이 도대체 무슨 소리인지 모르겠더라구요.. 이름이 없어서 생성자도 아니고 operator도 아니고 1시간 구글링 결투끝에 임시객체라는 표현을 알게되었어요.Q1임시객체가 무엇을 반환하는지가 궁금합니다..!코드상으로는 key 랑 value를 반환하는 것 같긴한데..내부를 살펴볼려해도 외계어가 난무해서 물어봅니다 ㅠㅠ 제가 너무 깊게 알려는건지 아니면 기초지식이 부족한건지 잘모르겠네요 하하..
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
Unable to start assembler. Check your settings.
3.12.1 버전으로 시작했는데도 설정오류가 뜹니다-g -f win64 $SOURCE$ -l $LSTOUTPUT$ -o $PROGRAM.OBJ$로 옵션 설정을 바꿨고 현재 윈도우 10 을 사용중인데 이유를 모르겠네요3.14.0버전도 마찬가지라 버전의 문제가 아닌 것 같습니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
list head와 tail
안녕하세요 stl list 구현부를 학습하던중에 head의 역할이 이해가 안되서 인터넷을 찾아봤는데요.head는 첫번째 노드를 가리키는 것tail이 마지막 노드를 가리키는 것 첫 초기화 상태는 head와 tail 서로 next prev를 이용해 가리키고값 삽입 부분에서 head의 next , tail의 prev를 새로운 노드를 가리키게 바꿔주면 되는 것인데.. 설명 내용에는 taill 부분이 빠져있어서 혼란이 왔어요.결론 : 그냥 둘다 통합으로 header로 표현하신건가요??
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
FindItem함수 한 번에 만들기
typedef bool(ITEM_SELECTOR)(Item* , int);Item* FindItem(Item items[], int itemCount, ITEM_SELECTOR* selector, int value){ for (int i = 0; i < itemCount; i++) { Item* item = &items[i]; if (selector(item, value)) return item; }}위 코드에서 typedef 부분을 없애고 한 번에 만들려고 하는데Item* FindItem2(Item items[], int itemCount, bool (*selector)(Item* item, int value)){} 이렇게 만들면 동작하지 않고Item* FindItem(Item items[], int itemCount, bool (*selector)(Item* item, int value), int value){}int value를 따로 받아줘야 동작하는 이유가 있나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
도와주세요
다운로드를 하는데 옵션이 여러개 나오는데 그냥 하면 되나요? ㅠㅠ잘 모르겠어요
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
다형성과 virtual 키워드
수업 너무 잘 듣고 있습니다. 3가지 질문을 하고 싶습니다.다형성 수업을 듣기 전, 자바를 통해서만 객체 지향 공부를 했었기 때문에 상속 클래스가 부모 클래스의 함수를 재정의 하면 다형성으로 인해 자식 클래스의 멤버 함수가 실행 되는줄 알고 있었으나,c++ 에서는 다형성을 위해 virtual 함수로 만들어줘야 한다는 것을 알게 되었습니다.Q1. 다형성을 위해 기본 클래스를 상속받은 자식 클래스들이 각자 마다 다른 함수를 실행하길 원할때마다virtual 키워드를 기본 클래스에서 모든 멤버 함수마다 달아주는 것이 일반적인가요?클래스 설계하실때 상속받을 클래스가 있어서 기본 클래스에 거의 모든 함수가 virtual을 달고 있는 것인지 궁금합니다. Q2. 상속성에서 생성자 / 소멸자 실행 순서를 말씀해주셨는데,부모 클래스 생성자() -> 자식 클래스 생성자()-> 자식 클래스 소멸자() -> 부모 클래스 소멸자()생성자의 호출 순서는 어떤 순서인지 궁금합니다.자식 클래스 생성자가 호출 되기전 , 선처리로 컴파일러가 부모 클래스 생성자를 먼저 호출한다. (자식 클래스 생성자가 나중에 호출된다.) 호출 순서 또한 부모 -> 자식자식 클래스 생성자가 내부에서 부모 클래스 생성자를 먼저 호출한다. (자식 클래스가 생성자가 먼저 호출된다,) 호출 순서는 반대 자식 -> 부모Q3. 접근 지정자 private : 을 통한 멤버 함수들은 상속을 못 받는 것이 맞는 것으로 보이는데다형성을 위해 재정의 할 함수들은 기본 클래스에서 모두 public : 선언을 해줘야 하는 것이 맞습니까? virtual 키워드가 달리는 함수들의 접근 지정자가 public : 이어야 하는것인지 궁금합니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
함수안에서 객체 생성
안녕하세요 강사님 C언어의 경우 함수안에서 배열을 만들어 반환할 수 없었습니다. C++의 경우도 stack에 선언한 배열은 반환하는게 의미가 없었는데요.Q1. vector와 같이 내부적으로는 배열을 갖고있지만 그 실체는 객체인 경우 객체반환을 통해 배열 반환과 동일한 효과를 얻을 수 있는건가요? Q2. 일반적으로 함수 리턴과정을 설명하실 때 함수의 반환형과 동일한 타입의 temp변수를 생성하고 그 포인터를 호출된 스택 프레임에 함께 전달하여 return문을 통해 값을 복사한다고 하셨습니다. 이러한 원리는 일반 자료형뿐만 아니라 컨테이너, 사용자 정의 클래스 등 모든 객체 자료형도 해당하는게 맞나요? (메모리 관점에서 객체 역시 일반 자료형과 똑같은 관점으로 취급해도 괜찮을까요?) 감사합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
iterator 사용
template<typename T> void printSet(set<T>& s) { for (set<T>::iterator it = s.begin(); it != s.end(); ++it) { cout << (*it) << " "; } } // 동작 X printSet<int>(s);컨테이너 클래스의 iterator를 사용하려고합니다.템플릿을 활용해서 작성을 하려는데 set<T>::iterator로는 동작하지 않는데 그 이유가 궁금합니다. 감사합니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
템플릿 적용
안녕하세요, 유익한 강의 감사합니다.질문에 필요한 내용으로 특정 영역을 발췌해서 올립니다.이번 질문은 템플릿의 사용이 어디까지 이어지는지입니다.Q1. @QQQQQQ 주석이하의 내용의 경우연산자 함수 스택 프레임에서 Iterator객체를 생성하였습니다. 이 때 T는 어떻게 결정이 되는건가요? 한 번 T가 결정되면 해당 클래스 설계도를 사용하는 메모리들은 T를 따로 정의하지 않아도 그대로 계승되는건가요?template<typename T> class Iterator { public: Iterator& operator++() { _ptr++; return *this; } Iterator operator++(int) { // @QQQQQQQQ Iterator temp = *this; _ptr++; return temp; } public: T* _ptr; }; Q2. 강의 정말 열심히 공부하고 있고 얼마 안있으면 완강을 하게될 것 같습니다. 저는 백엔드 개발자를 지망하고 있고 그전에 프로그래밍 기초체력을 탄탄히 쌓기 위해 본 과정을 공부하게 되었습니다. 이후 루키스님의 자료구조/알고리즘까지 공부하고 코테는 c++로 준비할 생각인데요. 본 강의를 한 번 더 복습하는게 나을까요? 아니면 자료구조강의로 바로 넘아가도 괜찮을까요? 개인적으로 전체 내용에 대해서 80~85% 정도이해한 것 같습니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
객체 생성
문득 임시 객체를 연습하다가 궁금한 점이 있어 질문드립니다. Q. 객체 생성을 위해서는 반드시 어떤 방법으로든 생성자가 호출되어야하나요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
강의 11:48 질문
강의 11:48에서 설명하신 내용에 관한 질문입니다.Knight(const Knight& knight) : Player(knight), _pet(knight._pet)Knight클래스의 복사 생성자를 정의하시면서 부모 클래스와 멤버 클래스의 기본 생성자가 아닌 복사 생성자를 호출하기 위해 초기화 리스트에 작성한 내용입니다. 여기서 Player(knight)가 성립하는 이유는Player(const Player& player) 복사 생성자: 자식->부모는 참조형에 대한 암시적 형 변환이 지원되기 때문에 가능한건가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
학원1년 과정vs 루키스님 강의vs 둘다병행
안녕하세요!저는 비전공 독학으로 공부하고 있습니다어느덧 c++강의 완강에 도달하고 있는데요루키스님이 올려놓은 c++,그래픽스,서버,자료구조,추후 출시될 언리얼 포폴 과정을 전부 수료하게 되면 1년 학원 과정에서 배우는 것들을 학습하는 거랑 어떤차이점이있는지 궁금해요취업이 최종목표는 아니지만 제가 부족한 것들이 무엇인지 모르겠어서요 이강의들로 제가 복습하고 기초를 튼튼히 단련하면 채워질수있는 것인지 아니면 추가적으로 학원1년과정을 거치는 것이 많은 도움이 될지 조언좀 해주실수 있을까요?ㅠㅠ Tmi) 항상 스타트업준비로 힘드실텐데 시간내서 좋은강의 올려주셔서 감사합니다 ㅎㅎ소드아트온라인 같은 게임 꼭 만드셨으면 좋겠네요! 언젠간 루키스님처럼은 아니여도 a급인재가 되고싶어요 하하
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
형 변환 생성자와 캐스팅
#include <iostream> using namespace std; class Knight { public: Knight() { cout << "[알림] 기본 생성자 호출" << endl; this->hp = 10; this->mp = 10; } Knight(int hp) { cout << "[알림] 타입 변환 생성자 호출" << endl; this->hp += hp; } ~Knight() { cout << "[알림] 소멸자 호출" << endl; } void print() { cout << "[정보] HP: " << this->hp << " MP: " << this->mp << endl; } public: int hp; int mp; }; int main() { // 1. 기본 자료형 형 변환 연산자 사용 // a의 값에 대해 형 변환 '연산자'를 사용하여 형 변환된 결과를 반환 후 b에 할당 int a = 3; double b = (double)a; // 2. 객체형에 대한 형 변환 생성자 사용 // (1) 기본적인 타입 변환 연산자 호출 순서 : 타입->소멸 Knight k1(5); k1.print(); // (2) 묵시적 타입 변환 연산자 호출 순서 : 타입->소멸 Knight k2 = 10; k2.print(); // (3) 기본 생성자로 생성 후 묵시적 타입 변환 연산자 호출하여 재할당 순서 : 기본->타입->소멸->소멸 Knight k3; k3 = 10; k3.print(); return 0; }[1]의 상황 - 이해하였습니다.해당하는 기본 자료형의 경우 단항 연산자인 "형 변환 연산자"에 의해 연산된 결과가 반환되어 double형 변수 b에 정상 할당되었습니다.[2-1]의 상황 - 이해하였습니다.오버로딩된 기본 연산자 중 인수가 하나인 타입 변환 생성자가 자동으로 호출되어 객체가 생성되었습니다.[질문 항목]Q1.[2-2] [2-3]의 상황 - 헷갈립니다.묵시적으로 형 변환 타입 생성자가 호출되어 우항의 Knight(10)이 우선 동작하고 그 결과가 반환되어 k2에 할당되었다라고 생각하였는데 실제 어셈블리로 동작을 확인하니 예상했던 순서로 동작하지 않고 바로 타입 변환 연산자가 호출되어 [2-1]과 [2-2]는 완전히 같았습니다. 기본 자료형에 대한 casting 처럼 캐스팅이 먼저 동작되고 그 결과가 반환되어 좌항에 할당된다고 생각했습니다. 그런데 반환형이 없는 생성자인데 대입 연산자 기준 우측에서 사용될 수 있었던건 의미만 캐스팅일 뿐, 실제로는 형 변환 연산자의 호출의 다른 방법이기 때문인가요? (실제로는 타입 변환이 아닌 인수가 1개인 기본 생성자 호출인데 사용 방법이 마치 형 변환과 같아서 이름이 그렇게 붙은건가요?)복잡하게 생각하지 않는다면,타입 변환 생성자는 1) 그 자체로 생성자로 활용 2) 캐스팅의 두 가지 사용처가 있고 1), 2) 모두 내부적으로 같은 방식으로 동작함.이라고 이해해도 괜찮을까요? 바로 전에 작성한 질문은 생각을 제대로 정리하지 못해 글이 난해하여 다시 정리하여 올리게 되었습니다.좋은 강의 감사드립니다.정말 많이 배우고있고 큰 도움이 되고 있습니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
섹션1 레지스터 기초
rbx -> 64 비트 == 8바이트 0x12345678 저장함eax -> 32비트 == 4바이트 0x1234 저장함ax -> 16비트 이고al -> ax의 하위 8비트 == 1바이트인데 0x00을 저장하면 0x1200가 아니고, 0x1230가 되야 하는거 아닌가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
타입 변환 생성자에 대해
다른 분들 질문을 봐도 확실히 이해가 가지 않는 듯하여, 제가 이해한 것을 주석으로 작성했는데 맞는지 확인해 주시면 감사하겠습니다.항상 감사드립니다
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
deque강의에서 사이즈를 3으로 잡아뒀는데, 메모리에서는 4로 잡히는 이유가 뭘까요?
deque강의 12:14분경에 deque<int> dq(3,1)로 해서 사이즈를 3으로 잡아뒀는데, push_back을 했을 때 메모리에서 확인하면 4개로 확인이되고 그렇게 설명하셨는데, 왜 4개인지 알 수 있을까요?