전체 글 67

[C++] 메모리 할당

[C++] 메모리 할당 C++ 프로그램들은 실행하는 동안 변수처럼 새로운 개체를 만들 때 메모리를 할당해야한다. 그리고 메모리 구조는 크게 데이터, 코드, 힙, 스택 영역으로 분류하며 각각의 역할이 정해져있다. 메모리 할당을 정리하기에 앞서 메모리 구조에 대해 알아볼 필요가 있다. 스택과 힙에 대해서 먼저 알아보겠다. 스택 (Stack) 함수에 전달되는 인자(매개변수), 함수내에 저장되는 지역 변수 등이 저장되는 곳이다. ▸ 한정된 범위 내에서 임시적으로 사용될 때 좋다. ▸ LIFO(Last In First Out)구조를 가지며, 가장 나중에 들어온 것이 먼저 나가는 구조이다. ▸ 제한된 크기를 가지고 있어 용량을 초과하는 개체를 넣으면 스택오버플로우 현상이 발생한다. 힙 (Heap) 사용자가 직접 관..

[C++] 형변환과 템플릿

[C++] 형변환과 템플릿 형변환 데이터를 다른 데이터 형으로 바꾸는 과정이다. int num = 250; float fNum1 = num/100; //fNum1 == 2.0f float fNum2 = (float)num/100; //fNum2 = 2.5f 명시적 형변환 float fNum3 = num; //묵시적 형변환. 컴파일러가 형을 변환해준다. 형변환을 해야하는 경우 1. 다른 코드 섹션의 인터페이스가 특정한 형을 요구할 때 2. 개체의 다형적 이용 C++ 스타일 형변환 ▷ static_cast 정적 형변환, 컴파일 타임에 형변환이 가능한지 검사한다. class A {}; class B : public A {}; class C {}; A* a = new A(); B* b = static_cast(..

[C++] 포인터,상수, 참조

[C++] 포인터, 상수, 참조 포인터 (Pointer) 개체의 메모리 주소를 저장하는 변수이다. 힙에 새 개체를 할당할 때, 함수를 다른 함수에 전달할 때, 배열 또는 기타 데이터 구조의 요소를 반복할 때 주로 사용한다. int *a; //C스타일 int* a; //C++스타일 int a = 3; //a는 3이고 주소값 x를 갖는다. int* b; //b는 포인터이다. b = &a; //b는 a의 주소값을 가리킨다. 즉, b는 x이며, *b == a 이다. *b += 1; //*b == a 와 같기때문에 a += 1 즉, a = 4; 포인터는 형식화된 개체 또는 void를 가리킬 수 있는데, 프로그램이 메모리의 힙에 개체를 할당하면 포인터 형태로 해당 개체의 주소를 받고 이것을 소유 포인터라고 한다. ..

캐릭터 구현 시 상속을 통해서만 구현해야하는가?

캐릭터 구현 시 상속을 통해서만 구현해야하는가? 일단 먼저 결론부터 말하면 '아니다'라고 할 수 있을것 같다. 상속을 사용하는 이유는 무엇인가? 상속은 이미 존재하는 클래스를 기반으로 손쉽게 변형 클래스를 만들수 있기 때문에 사용한다. 즉, 공통적인 부분을 사용하기 위해서 이며 클래스 간에 업/다운 캐스팅이 가능하기 때문이다. 업 캐스팅 / 다운 캐스팅은 무엇인가? class Enemy { }; class Zombie : public Enemy { }; //... int main() { //업 캐스팅 Enemy* zombie01 = new Zombie; //다운 캐스팅 Enemy* pZombie = new Enemy; Zombie* Zombie02 = dynamic_cast(pZombie); } 업 캐스..

Call By Value / Address / Reference는 무엇인가?

Call By Value / Address / Reference는 무엇인가? CallByValue : 값에 의한 전달 CallByAddress : 주소에 의한 전달 CallByReference : 참조에 의한 전달 함수가 호출 될 대 매개변수에 인자를 어떤 방식으로 넣어줄건지에 대한 개념이다. Call By Value #include using namespace std; void CallByValue(int value) { value = 1; } int main() { int num = 0; CallByValue(num); cout

가상함수란 무엇인가?

가상함수란 무엇인가? 가상 함수 (Virtual Function) 기본 클래스내에서 선언되어 상속한 클래스 내에서 같은 함수로 오버라이딩 될 수 있는 함수 또는 메소드. 포인터 또는 기본 클래스에 대한 참조를 사용하여 상속된 클래스의 객체를 참조하면 해당 객체에 대해 가상 함수를 호출하고 상속된 클래스의 함수를 실행할 수 있다. class Enemy { private: int Index; public: virtual void Init(); } class Zombie : public Enemy { public: virtual void Init() { index = 1; }; } 가상 함수 선언 규칙 1. 클래스의 public으로 선언되어있어야함. 2. 가상함수는 static, friend가 함수가 될 수 ..

[C++] 클래스와 상속

[C++] 클래스와 상속 클래스 (Class) struct Vector3D { float x; float y; float z; }; class Vector3D { public: float x; float y; float z; }; 데이터와 함수를 연결하는 하나의 방법으로 클래스의 특정 인스턴스를 개체라고하며, 개체는 자신만의 데이터를 포함하지만 동일 클래스의 모든 개체는 같은 함수를 공유한다. 구조체(struct)의 상위 버전이다. 구조체와는 달리 접근 제어의 차이가 있는데, 클래스는 public, protected, private이라는 세가지 접근 단계를 제공한다 (OOP의 캡슐성). 구조체는 기본적으로 public이며 클래스는 기본적으로 private이다. 클래스 선언 시 자동적으로 선언되는 암시적 ..

지역, 전역, 동적 할당 변수란 무엇인가?

지역, 전역, 동적 할당 변수란 무엇인가? //전역 변수 int GlobalVar = 1; int main() { //지역 변수 int LocalVar = 1; //동적 할당 변수 int* DynamicVar = new int; *DynamicVar = 1; return 0; } 지역 변수 - 특정 구역 내에서 생성되어 그 구역(함수)에서만 사용 가능한 변수. - 라이프 사이클 : 지역변수가 선언된 함수가 끝날 때 까지 - 할당되는 메모리 구조 : 스택 전역 변수 - 어느 위치에서든 호출하여 사용 가능한 변수. - 라이프 사이클 : 프로그램이 끝날때까지(컴파일 타임) - 할당되는 메모리 구조 : 데이터 동적 할당 변수 - 프로그램이 실행되는 런타임 동안 사용자가 직접 공간의 크기나 시점을 결정하여 힙 영..

게임 프로그래밍에서 C++이 사용되는 이유는?

게임 프로그래밍에서 C++이 사용되는 이유는? 객체 지향 프로그래밍이 뭔데? 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이며 다형성, 추상화, 캡슐성, 상속성과 같은 4가지의 속성을 가지고 있다. - 다형성(Polymorphism) 다양한 자료형에 속할수 있는 성질. 부모 클래스의 형 포인터를 이용하여 하위 개체들을 참조할 수 있거나, 부모 클래스를 상속 받아 기능을 변경하거나 확장하는 것.오버로딩, 오버라이딩 등이 있다. 오버라이딩 : 부모 클래스를 상속 받은 자식 클래스에서 새롭게 재정의하는 것 오버로딩 : 서로 동일한 기능을 하고, 받는 매개 변수만 다른 함수가 있다면 이름을 동일하게 할 수 있다..