월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
캐스팅4총사 강의 질문입니다
뒤에 부분을 다 안보고 질문드렸더니 조금 애매해졌네요.상식적인 캐스팅이 아니라애초에 부모가 어떤 자식의 타입이었는지 확실할때쓰는 것이라고 하는게 맞겠네요.강의에서 나오는 것처럼요Player* p = new Knight();Knight* k1 = static_cast<Knight*>(p);말이 안되는건 아니니까 그때 쓴다 이런 뜻이었네요.역시 한국말은 끝까지 들어봐야 되는거 같네요.. ㅎㅎ답변은 안해주셔도 되겠습니다. 감사합니다.=================================일단 주말에 질문을 드려서 죄송합니다.답변은 월요일에 해주시면 될 것 같습니다!3분 13초부터 나오는 상속 관계끼리의 타입변환에대해서 주석으로 이야기 해주시는 부분인데요Player*->Knight* (다운캐스팅) 이게상식적인 캐스팅이라고 하셨는데 아무리 들어도 뭔가 잘못된게 아닌가싶어서요. 반대로 이야기 하신것 아닌가요?..자식은 부모를 포함하고 있으니까 애초에 부모로도캐스팅 될 수 있는데 부모가 자식으로 캐스팅 되는 것은 타입변환 강의에서도 위험하다고 하셨던것 같은데혹시 player가 자식인가 싶어서 뒤에 내용도 봤는데 Knight가 자식이더군요. 제가 짐작하건데 반대로 이야기 하신게 아닌가 싶은데맞나요??업캐스팅이 상식적인것이고 다운캐스팅은 위험한것 아닌가요?그래서 위험하니까 다운캐스팅 시에는 명시적으로 했던 것이구요.인터넷에서 찾아봐도 다운캐스팅은 업캐스팅에 비해 안전하지 않다고 하는데 다운캐스팅이 상식적인 캐스팅이라는게 이해가 안되어서 질문드려 봅니다.같은 질문이 있나 찾아봐도 없어 이렇게 질문글 남깁니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
ReverseStr 함수에 관련된 질문입니다
ReverseStr 문자열 뒤집기 함수 관련 질문입니다.포인터를 이용한 방식으로 문제 풀이를 해봤습니다미리 StrLen 함수에서 문자열 str의 길이를 받아온 후while문을 이용해서 NULL값을 만날때 까지 str이 나타내는 주소를 이동시켰습니다. cout << *--str; 의 경우 정상적으로 str의 주소가 -1씩되며 포인터에 의해 그 주소에 해당하는 값들이 잘 출력되어정상적으로 출력이 됬는데 cout << --str; 을 할 경우이런식으로 출력이 되더군요..출력된 형태를 보면ololloelloHello 인 것 같은데cout << --str; 의 결과가 이렇게 나온 이유가 궁금합니다..
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
다중 포인터 질문입니다
#include <iostream>using namespace std;// 다중 포인터void SetMessage(const char* a){ a = "Bye"; }void SetMessage(const char** a){ *a = "Bye";}int main(){ // .rdata [H][e][l][l][o][\0] char형 배열 형태 // main stackframe msg[ Hello주소 ] << 8바이트 const char* msg = "Hello"; // [매개변수][RET][지역변수(msg(Hello주소))] [매개변수(a(Bye주소))][RET][지역변수] SetMessage(msg); cout << msg << endl; // .rdata [H][e][l][l][o][\0] char형 배열 형태 // msg [ Hello주소 ] << 8바이트 // pp[ &msg ] << 8바이트 const char** pp = &msg; SetMessage(pp); cout << msg << endl; return 0;} 메모리를 찬찬히 까보면서 확인했는데궁금한점이 있어서 글 남깁니다 1.void SetMessage(const char** a){ *a = "Bye";} 이 부분이 실행되고 난 뒤에 msg의 시작주소가 Hello주소가 아닌 Bye 주소를 나타내고있는데원래 포인터를 이용하면 해당 주소로 텔레포트 후 그 주소의 데이터에 직접 접근해서 데이터를 변경하는 것으로 알고있습니다그런데 문자열은 .rdata로 수정불가하기 때문에 단순히 msg가 가리키는 주소만 변경해서즉, msg의 시작주소가 Hello주소가 아닌 Bye의 시작주소를 가리키게 된건가요? 2.함수 호출이 끝난 뒤에는 Bye주소에 해당하는 값인 문자열 "Bye"는 메모리상에 데이터로 남아있던데이 데이터가 사라지지 않는 이유를 잘 모르겠습니다.스택 프레임 구조에서 [매개변수][RET][지역변수] 이 세가지만 없어지게 되서 그런건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
연관 없는 클래스 사이의 값 타입 변환
안녕하세요.타입변화#2 강의 // 타입 변환 연산자를 사용Knight knight2 = dog; 을 하려고 하는데요. 디버깅 모드에서// 타입변환 연산자 operator Knight() { return (Knight)(*this); }이 부분이 무한 루프를 돌면서 stack overflow가 발생합니다.그냥 빌드는 가능하던데 무슨 이유 때문일까요??
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
문자열 출력의 경우
안녕하세요B는 data영역에 있는 문자열의 시작 주소를 저장하는데그렇다면 B를 출력하면 주소값을 출력해야 하는거 아닌가요? A의 상황도 같은 상황입니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
포인터 질문입니다
void Createmonster(StatInfo* Info); // 함수 선언부 Createmonster(&monster); // 함수 호출부 void Createmonster(StatInfo* Info) // 함수 내용{ cout << "몬스터 생성" << endl; Info->hp = 40; Info->damage = 8; Info->defence = 2;}Info->hp 가 어떻게 monster.hp에 접근하게 되는지 잘 이해가 안갑니다..해석이 잘 안된다고 해야될지 말로 표현이 잘 안됩니다
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
강의순서 질문입니다
파트1 ~ 파트3까지 수강신청했는데요 파트1인 c++을 듣고 파트3 자료구조 알고리즘을 이어 공부하는건 어떻게 생각하시나요 ? 이후 파트2 다이렉트x를 공부하는 방향 입니다. 혹시 파트3를 공부하는데에 파트2의 내용이 필요할까요? 어떻게 생각하시는지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
다음 강의 고민입니다
이번 강의를 다 듣고 다음 강의 중 section3 부터 할지 section2 부터 할지 고민입니다.먼저 자료구조와 알고리즘을 통해 C++ 에 대해 더 공부하는게 괜찮을까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
문제 5번 질문드립니다.
풀이를 안보고 만들어 보았는데 이렇게 하니 문자의 위치를 교환하는 부분은 문제가 없는데 교환을 하는 중간 부분에서 원하는 값인 dlrow olleh 가나와도 멈추지를 않아 다시 hello world가 최종값으로 되어 출력이 됩니다.. 이런 경우에는 어떻게 해결해야 하나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
디스어셈블리 질문입니다.
13분 22초에 나오는 플레이어 스탯 관련 질문입니다.저 같은 경우는 ebp레지스터의 위치를 기준으로 값을 할당하는게 아닌아래의 내용처럼 eax레지스터의 주소에 +4, +8한 값을 이용하여 변수에 값이 할당되는데요제 컴퓨터는 왜 eax레지스터를 이용하였는지 궁금합니다. ret.hp = 100;00CC245E mov eax,dword ptr [ret] 00CC2461 mov dword ptr [eax],64h ret.attack = 10;00CC2467 mov eax,dword ptr [ret] 00CC246A mov dword ptr [eax+4],0Ah ret.defence = 2;00CC2471 mov eax,dword ptr [ret] 00CC2474 mov dword ptr [eax+8],2
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
할당된 메모리를 감싸는 'cccccccc' 질문 드립니다
멤버변수 int hp; 하나만 지정 하고a.hp=1;b.hp=2; 식으로 a,b 로 각각 대입했을때 메모리가 cccccccc0000002cccccccccccccccc0000001cccccccc 식으로 메모리가 올라오는데 감싸고 있는 'cccccccc' 의미가 있는 값인가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
주소 전달 과 참조 전달 관련하여 질문있습니다
값 전달과 주소 전달 2개만 봤을 때 되도록 이면 주소 전달을 사용하라고 하셨는 대주소를 알면 그 데이터의 값을 접근 할 수 있으니까 굳이 값 전달 사용 하지 않고 주소 전달만 사용해도 되는 부분일까요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
가상함수 소멸자와 가상함수 테이블 질문
class Item { public: //... 생략 virtual void function1() { cout << "Item Function1()" << endl; }; } class Weapon : public Item { public: //...생략 void function1() { cout << "Weapon Function1()" << endl; }; } class Armor : public Item { public: //...생략 void function1() { cout << "Armor Function1()" << endl; }; } int main() { // 1번 암시적 형변환 Weapon weapon; Item* iPtr = &weapon; iPtr->function1(); // 2번 암시적 형변환 Armor armor; Item* iPtr = &Armor; iPtr->function1(); // 3번 명시적 형변환 Item item; Weapon* wPtr = (Weapon*)&item; wPtr->function1(); }1번을 수행하면 Weapon을 암시적으로 Item으로 형변환하고 해당하는 iPtr이 Weapon::function1()을 호출2번을 수행하면 Armor를 암시적으로 Item으로 형변환하고 해당하는 iPtr이 Armor::function1() 을 호출3번을 수행하면 Item을 명시적으로 Weapon으로 형변환하고 해당하는 wPtr이 Item::function1() 을 호출클래스타입을 편의상 CType, 가상함수 테이블을 가리키는 포인터를 편의상 VPtr 이라고 지칭하겠습니다.가상함수 생성시 해당하는 CType의 VPtr생성. (가상함수에 관련된 실습 시간마다 메모리 확인 시 맨 처음 주소 부분에 생성된 주소 값?)이 포인터가 가리키는 가상함수 테이블에는 CType 의 가상함수에 대한 정보가 들어가 있음.즉 CType 의 주소에는 가상함수 테이블을 가리키는 VPtr 의 정보가 내장되어 있음 => 주소의 맨 처음 값에.암시적 명시적 형변환과는 관계없이 포인터에들어간 주소값에는 가상함수 테이블을 가리키는 VPtr이 존재.그러므로 형변환이 끝난 CType에서 가상함수를 호출하더라도 VPtr 정보는 남아 있고 CType 에서 가상함수를 호출하면 원본 CType 의 가상함수를 실행하게 됨 실습 관련실습에서 Item* 배열에 있는 자식 클래스(*Weapon, *Armor) 값들이 존재한다.Item의 소멸자에 가상함수를 붙여놓으면 자식 클래스의 소멸자에도 VPtr 이 생성되고 가상함수 테이블에서 소멸자를 가상함수로서 관리한다.Item* 배열에 있는 객체들을 순회하면서 delete를 이용해 하나씩 메모리를 해제한다.이 때 *Weapon, *Armor 같은 생성된 자식 클래스 주소 값을 가리키는 포인터들이 해제된다.그리고 해당 주소값에 있는 Weapon, Armor객체들이 소멸된다.이 때 Item* 배열에 들어있기는 하지만 *Weapon 주소는 Weapon 타입 VPtr을 가지고 있으므로 Weapon 의 가상함수인 ~Weapon()을 호출한다. 형변환이 암시적, 명시적과 관계없이 포인터에 들어간 주소값이 어떤형태의 CType이냐에 따라 가상함수 function()이 호출된다고 이해하면 될까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
단축키 질문합니다
17분37초에서 복사할 때 사용하신 단축키가 무엇인가요???
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
처음 실행 화면이 다르고 실행도 에러가 뜹니다
section .textglobal mainmain: ;write your code here xor rax, rax ret 강의 자료와는 달리 맨 처음 실행화면에 #include로 시작하는 구문도 뜨지 않고 이렇게만 뜨는데 버전이 달라지면서 오류가 뜬 걸까요? C:\Users\USER\AppData\Local\Temp\SASM\program.asm:1: error: label or instruction expected at start of lineC:\Users\USER\AppData\Local\Temp\SASM\program.asm:9: error: parser: instruction expectedgcc.exe: error: C:\Users\USER\AppData\Local\Temp\SASM\program.o: No such file or directory hello world를 실행하면 이렇게 뜹니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
이중 포인터를 이용한 값 변경 질문입니다.
이중 포인터를 이용한 값 변경 질문입니다.const char* msg = "Hello"; 1 번 함수 void SetMessage(const char* msg) { msg = "Bye" // 값이 변경되어지지 않음. // *msg = "Bye" <= 불가능, 식이 수정할수 없는 lvalue } 2 번 함수 void SetMessage(const char** msgPtr) { *msgPtr = "Bye" // 값이 변경됨. }1번 : 함수의 경우 msg는 역참조가 불가능1. 역참조 시 const 타입 주소로 이동. 2. const 타입은 값을 변경할 수 없는 형태임 3. 그래서 1번 함수에서 msg를 역참조해서 값을 변경하는 것은 불가능.2번 : 함수의 경우 msgPtr은 역참조가 가능1. msgPtr은 "Hello"주소값을 가지고 있는, msg 포인터를 가리키고 있음.2. 역참조시 msg 포인터로 이동.3. *msgPtr = "Bye"; <= 이 부분에서 혼동이 와서 질문드립니다.질문 : 2번의 연장선Hello의 시작 주소값은 편의상 HAddr 이라고 칭하겠습니다.1. msg는 8바이트 형태의 포인터이다.2. msg는 "Hello"의 시작 주소값 HAddr을 가지고 있다.3. 해당 시작 주소값은 'H'라는 값을 가지고 있다.4. *msgPtr = "Bye"5. 수행시 - 메모리에 'B', 'y', 'e'라는 값을 가지는 const char* 타입 변수 생성.6. *msgPtr을 통해 msg 포인터를 역참조. - msg포인터가 가지고 있는 값 HAddr을 'Bye'의 시작 주소 값 B의 주소값으로 변경?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
nullptr 자체 구현 과정에 대하여 질문이 있습니다.
안녕하세요.nullptr 수업 중 알려주신"nullptr 자체 구현 과정"에 대하여 질문이 있습니다.#include <iostream> using namespace std; #include <vector> #include <list> #include <deque> #include <map> #include <set> #include <algorithm> void Test(void* ptr) { cout << "Test(*)" << endl; } class NullPrt { public: // 그 어떤 타입의 포인터와도 치환 가능 template<typename T> operator T* ()const { return 0; } // 그 어떤 타입의 멤버 포인터와도 치환 가능 template<typename C, typename T> operator T C::* () const { return 0; } private: void operator&() const; // 주소값 &을 막는다. }; const NullPrt _NullPtr; int main() { Test(_NullPtr); return 0; }위와 같은 코드에서 Test(_NullPtr);를 실행하면,왜 NullPtr의 template<typename T> operator T* ()const { return 0; }로 진입하는 지에 대하여 조금만 더 자세히 설명해주실 수있을까요?Test 함수로 _NullPtr 객체를 보내주는데,왜 operator T* () const로 진입하지는 약간 이해가 되지 않습니다. 혹시 관련하여 참고할만한 구글링 키워드를 알려주셔도 좋습니다. ^^항상 잘 배우고 있습니다.감사합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
포인터 실습 강의 질문합니다.
포인터 실습 강의를 다 보고 연습할 겸 플레이어를 만들고 플레이어가 레벨업을 할 경우 영구적으로 스탯이 증가하는 것을 만드려고 하는데 생각대로 안되더군요..포인터만 사용해서는 만들 수 없는 건가요? struct statinfo{ int hp; int atk; int def;};void player(statinfo* playerinfo){ playerinfo->hp = 300; playerinfo->atk = 30; playerinfo->def = 20;}int playerup(statinfo* abc){ int up = (abc->hp) + 12; cout << up << endl; return up;}int main(){ statinfo playerstat; statinfo* playerstatPTR = &playerstat; player(&playerstat); cout << playerstat.hp << endl; cout << playerstatPTR->hp << endl; playerup(&playerstat);}
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
함수형식에 대해서 궁금합니다
함수형식에 대해서 궁금합니다현재 c++ 강의 함수쪽 단원을 배우고있는데요 void main (float a, float b);{~}이런 형식으로 가르쳐주셨고 c++에서 잘 써먹고 있습니다. 인터넷에서 c++ 이 아닌 쉐이더코드쪽을 보면 void main (out vec4 a, in vec2 b){~} 이렇게 되어있는 것도 있더라구요.왜 오른쪽에 out 과 in 이 공존하는건가요?c++과 glsl 의 문법의 차이인건가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
delete[] 할때 소멸자 실행 순서
delete[]를 통해 다수의 클래스를 지울 때 실행되는 소멸자의 실행순서는 고정인가요?제 컴퓨터 환경에서의 한 간단한 실험에서는 생성순서의 역순으로 소멸자가 실행었습니다만 다른 상황에서도 그러한 방식이 유지될것이라는 확신을 얻을수는 없었습니다.delete의 내부동작방식이 cpu에 따라, 컴파일러에 따라 상이하게 동작할 여지가 있나요? 다시 말해 delete는 자기결정적인가요?