목록전체 글 (67)
헤더파일
name mangling c++에서 지원하는 함수 오버로딩은 같은 함수이름으로 여러 타입을 지원하게 해주지만 어셈블리에서는 함수이름 하나당 하나의 정의만 가능하기 때문에 컴파일 하게 되면 오버로드된 함수에 따라 함수이름이 변하게 됩니다. 이러한 현상을 name mangling 이라고 합니다. c 파일과 cpp 파일을 동시에 컴파일 한다면 name mangling 현상 때문에 오류가 발생합니다. cpp 컴파일러와 c 컴파일러가 같은 함수라도 어셈블리 형태가 다르기 때문인데 이럴 경우 아래와 같은 전처리기를 사용하여 해결합니다. #indef __cplusplus extern "C" { #endif // 함수들 #indef __cplusplus } #endif .c 파일에 정의된 printf 함수를 cpp에서..
상수 멤버 함수를 코드의 실수를 줄이는 이유도 있지만 상수 객체에서 사용하기 위한 이유도 있습니다. class Rect { int width; int height; public: Rect(int x, int y) :width(x), height(y) {} int getArea()/*const*/ { return width * height; }; }; void foo(const Rect& r) { cout
멤버함수 호출 원리 class Point { int x = 0, y = 0; public: void set(int a, int b) //set(Point* const this, int a... { x = a; y = b; } }; int main() { Point p1; Point p2; p1.set(10, 20); // set(&p1,10,20) } 객체마다 함수를 할당하지 않는데 어떻게 p1의 x, y를 set하는지 알 수 있을까? 주석처럼 객체에 대한 포인터를 넘기기 때문에 가능합니다. 객체의 주소를 레지스터로 보내주고 함수 내부적으로는 레지스터의 값을 이용하여 동작합니다. 이런 동작을 this call 이라고 합니다. class Point { int x = 0, y = 0; public: void..

런타임 형식 정보 RTTI(런타임 형식 정보)는 프로그램 실행 중에 개체의 형식이 결정될 수 있도록 하는 메커니즘입니다. 많은 클래스 라이브러리 공급업체가 이 기능을 자체적으로 구현하고 있었기 때문에 RTTI가 C++ 언어에 추가되었습니다. 이 때문에 라이브러리 간에 호환되지 않는 문제가 발생하게 되었으므로 언어 수준에서 런타임 형식 정보에 대한 지원이 필요하다는 사실이 명백해졌습니다. 명확성을 위해 여기에서 RTTI에 대한 설명은 거의 전적으로 포인터에 국한됩니다. 하지만 설명된 개념은 참조에도 적용됩니다. 런타임 형식 정보에는 다음 세 가지 기본 C++ 언어 요소가 있습니다. dynamic_cast 연산자 다형 형식을 변환하는 데 사용됩니다. typeid 연산자 개체의 정확한 형식을 식별하는 데 사용..
보호되어 있는 글입니다.

익명 클래스 형식 Microsoft C 확장을 사용하면 이름을 지정하지 않고 다른 구조체 내에서 구조체 변수를 선언할 수 있습니다. 이러한 중첩된 구조체를 익명 구조체라고 합니다. C++에서는 익명 구조체를 허용하지 않습니다. // anonymous_structures.c #include struct phone { int areacode; long number; }; struct person { char name[30]; char gender; int age; int weight; struct phone; // Anonymous structure; no name needed } Jim; int main() { Jim.number = 1234567; printf_s("%d\n", Jim.number); }..

C++ 컴파일러에서 함수를 오버로딩하는 과정은 다음과 같습니다. 1 단계 자신과 타입이 정확히 일치하는 함수를 찾는다. 2 단계 정확히 일치하는 타입이 없는 경우 아래와 같은 형변환을 통해서 일치하는 함수를 찾아본다. Char, unsigned char, short 는 int 로 변환된다. Unsigned short 는 int 의 크기에 따라 int 혹은 unsigned int 로 변환된다. Float 은 double 로 변환된다. Enum 은 int 로 변환된다. 3 단계 위와 같이 변환해도 일치하는 것이 없다면 아래의 좀더 포괄적인 형변환을 통해 일치하는 함수를 찾는다. 임의의 숫자(numeric) 타입은 다른 숫자 타입으로 변환된다. (예를 들어 float -> int) Enum 도 임의의 숫자 타..

개발환경 언리얼 엔진 4.17 게임 소개 드론 국가 자격증을 연습할 수 있는 시뮬레이터 8가지 시험항목 세부 구현 모드1, 모드2 컨트롤러 지원 바람에 따른 드론 영향 구현 https://youtu.be/ekZn7kWeJb8 게임구조 감독관 시스템 시험에서 발생할 수 있는 경로 이탈, 각도 및 속도 미 준수, 고도 미 준수 등 다양한 상황에 대해 감시할 수 있는 시스템을 만들었습니다. 드론 컨트롤러 지원 드론 컨트롤러을 입력을 받을 수 있도록 Simple Controller Plugin을 적용했습니다. 추가로 입력값의 Deadzone, 최대 값 설정을 할 수 있도록 만들었습니다. 바람에 따른 드론 움직임 바람의 방향으로 드론에 힘을 주어 실제처럼 드론이 바람에 영향을 받게 하였습니다.