월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨[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개인지 알 수 있을까요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
변수와 레지스터 강의 17:15 질문
Q1.mov rax, [a]를 통해 변수 a의 값을 rax에 할당하였습니다.디버깅 모드-레지스터창에서는 rax의 값이 0x443333...으로 나와습니다. 메모리창의 a의 값은 0x11, 0x22, ... 의 순서인데 왜 뒤집어진건지 궁금합니다! Q2.Q1과 이어집니다만,a. 16진수 상수를 레지스터에 할당하고 레지스터창을 보면 입력한 값 그대로 들어가 있는 것을 확인하였습니다. b. 16진수 상수를 변수에 넣은 경우 메모리창을 보면 입력한 값의 순서가 뒤집어져있는 것 같습니다.어떤 원리가 있는건지 궁금합니다.ex) mov [a], byte 0xef mov [a], word 0xabcd예상 >> ab, cd, 22, 33, ...실제 >> cd, ab, 22, 33, ...이 저장 방식이 이해가 되지 않습니다...! 감사합니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
동적 객체 생성 전에 클래스 포인터의 멤버함수 호출
class TestClass{public: void Init() { cout << "CTestClass::Init()" << endl; } int mmmi;};int main(){ TestClass* pi = nullptr; pi->Init(); // 정상 실행 pi->mmmi = 10; // 에러} 안녕하세요. 강의 잘 듣고 있습니다.위와 같은 경우에 객체가 생성되지 않은 상태에서 멤버변수에 접근 되지 않는 건 이해가 가는데 함수는 호출이 정상적으로 됩니다. 설명 좀 부탁드립니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
포인터와 배열 기반 문자열과 둘의 차이에 대해
포인터와 배열 기반 문자열과 둘의 차이에 대해, 제가 이해한 것이 맞는지 확인 해 주실 수 있으신가요?항상 감사드립니다. [ 포인터 vs 배열 ]포인터를 이용한 문자열const char test1 = “Hello World”;*“Hello World”는 데이터 영역(.rodata)에 배열의 형태로 할당된다.포인터 test1은 원본 배열 첫 번째 요소인 ‘H’의 주소를 가진다..rodata에 존재하므로 문자열의 각 요소를 수정할 수 없다.배열을 이용한 문자열char test2[ ] = “Hello World”;미리 데이터 영역에 할당된 “Hello World”의 요소를 각각 복사하여 새로운 배열이 할당된다.배열 이름 test2는 복사된 배열 첫 번째 요소인 ‘H’의 주소를 가진다.복사된 배열이므로 문자열의 각 요소를 수정할 수 있다.결론, 포인터와 배열의 차이배열과 포인터는 본질적으로 다르다.배열의 이름이 포인터처럼 사용되지만, 포인터가 오직 어떠한 대상을 가리키는 고정 크기의 주소만 가지고 있는 반면, 배열은 이름이 포인터로 동작할 수 있을 뿐 본질은 변수의 모임이라는 여러 바구니로 이루어져 있기 때문이다.따라서 배열의 크기는 포인터와 달리 타입과 길이에 의해 달라진다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
문자열 char와 char* 관련 질문입니다.
안녕하세요 강의 듣는 도중 궁금한 점이 생겨서 질문 드립니다. int BUF_SIZE = 100;char a[BUF_SIZE] = "Hello"char b[BUF_SIZE] = "World"; 1.strcpy나 strcat 같은 함수를 보면 char가 char* 형태의 매개변수가 될 수 있는 이유가a가 배열이기 때문에 배열의 시작주소를 인자로 넘겨주기 때문에 가능한건가요? 2.char형 변수는 데이터가 배열에 저장이 되기 때문에 복사가 이루어지면 그만큼 데이터를 복사하게된다고 생각이드는데실무에서는 용량이나 트래픽을 아끼기위해서 char* 나 const char* 를 사용하는 편인가요??
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
선처리 영역의 구분을 어떻게 해야할까요?
c++ 초기화 리스트 수업입니다.사진의 어셈블리 코드를 보시면,call Inventory::Inventory가 생성자의 몸체부분과 같은 중괄호로 묶여있습니다. 그렇다면 Inventory() 생성자가 선처리 영역이 아닌 몸체 내에서 호출된다고 보는게 맞는걸까요? 물론 선생님이 강의시간에 Inventory() 생성자는 선처리 영역에서 기본적으로 한번 호출된다고 하셨기때문에, 만약에 같은 중괄호에 묶여있더라도 저걸 선처리 영역으로 본다면, 그냥 몸체에 있는 첫번째 코드 int a=3;이 실행되기 전까지의 모든 어셈블리 코드는 다 선처리 영역이다! 라고 보는것이 맞을까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
sasm 오류
sasm 수업 아무리 다시 보고 따라 해도 처음부터 오류가 뜨는데 sasm으로 하는 수업 전부다 버리고 c++만 들어도 될까요? 11만 원 주고 강의 구매했는데 .. 그냥 버리기 너무 아까워요 ..