객체 지향 프로그래밍 객체 지향 프로그래밍은 4가지 특징이 있다 상속, 다형성, 추상화, 캡슐화이다 이 특징들에서 공부하다보니 가상함수에 대해서 자세히 공부해야겠다는 생각을 했다 가상 함수 가상함수란? 부모 클래스를 상속받을 클래스에서 재정의할 것으로 기대하고 정의해놓은 함수다 virtual 키워드로 함수 앞에 붙여서 가상함수를 나타내고 재정의는 override키워드를 사용하여 할 수 있다 class Parent { public: virtual void Func1(); } class Child :public Parent { public: virtual void Func1() override; } 바인딩이란 함수나 변수의 주소가 결정되는 것을 말한다 Early binding( = static binding..
내적 벡터 A와 벡터 B를 내적하면 벡터 A와 벡터 B가 이루는 각의 코사인 값이 나온다 여기서 |A|와 |B|는 단위벡터로 1이 될 것이기 때문에 cos θ 만 남게 된다 외적 벡터 A와 벡터 B를 외적하면 벡터 A와 벡터 B에 수직인 벡터가 나온다 공식은 이렇게 되고, 외적의 경우 내적과 달리 연산 순서에 따라 값이 달라진다 예를들어 A(1,2,0) B(2,1,0)이라는 벡터가 있을 때 A x B = (0-0, 0-0, 2 - 4) = (0, 0 ,-2)로 아래로 뻗는 벡터가 나오지만 B x A = (0-0, 0-0, 4 - 2) = (0, 0, 2)로 위쪽을 향하는 벡터가 나온다 벡터의 외적은 오른손 법칙을 따른다 A벡터에서 B벡터의 방향으로 오른손을 휘감고 엄지손가락이 외적한 결과값의 방향이 된다..
생성자 ( Constructor ) 객체가 생성될 때 초기화하는 함수 오버로딩이 가능하다 디폴트 생성자 작성한 생성자가 없을 경우 컴파일러에 의해서 자동으로 만들어지는 생상자 매개변수가 없거나 초기화된 매개변수를 가지고 있다 클래스 하나에 하나의 디폴트 생성자가 있다 class Example { public: Example(); Example(int a = 0); }; int main() { Example e; // Error!! return 0; } ▶ 디폴트 생성자가 두 개라서 생기는 오류 class Example { public: Example(); Example(int a); }; int main() { Example e;//디폴트 생성자 호출 Example e(10);//생성자 호출 return..
메모리 공간 Code 영역 함수, 상수 Data 영역 전역 변수, 정적 변수(static) Heap 영역 동적 할당 ->런타임에 크기 결정 Stack 영역 지역, 매개 변수 컴파일 타임에 크기 결정 overflow / underflow C/C++에서는 전역/정적 변수 선언시 자동으로 0으로 초기화된다 동적 할당과 정적 할당 동적 할당과 정적 할당은 메모리 공간을 언제 할당하느냐에 따라 나뉘어진다 동적 할당의 특징 프로그램 실행 단계에서 공간 할당이 이루어진다 메모리 크기가 고정되어있지 않아서 내가 원하는 메모리만큼 할당할 수 있다 더 이상 사용하지 않는 공간은 사용자가 직접 해제 해줘야한다 Heap영역을 포인터로 가르켜 할당한다 C++에서 동적 할당은 new / delete C에서는 malloc / fr..
#pragma pack Struct test { Char a; //1byte Int b; //4byte }test; (short = 2byte) 구조체 test의 크기는 ? = 8 byte 구조체의 크기 할당에는 크기가 가장 큰 자료 형을 기준으로 배수만큼 커진다. test에서는 char (1byte ) + int (4byte) = 총 5바이트가 필요하므로 8 바이트가 할당된다 ->> 이유는 CPU가 접근하기 쉬운 위치에 필드를 배치하기 위함이다 이 과정에서는 3 byte의 메모리 낭비가 발생한다 #pragma pack(push, n) // n은 정렬할 크기 1, 2, 4, 8, 16만 유효, 디폴트 8 #pragma pack(pop) // pragma pack(push, n)해제
사원수란? 회전을 표현 세 축을 동시에 회전 4개의 값(x, y, z, w)으로 이루어진 복소수(Complex Number) 체계 벡터 (x, y, z)와 스칼라(w, roll)으로 구성 스칼라 좌표계가 바뀌어도 변하지 않는 양 쿼터니언에서 w 값은 회전 축에 대한 정보를 담고 있으며, 회전을 수행할 때 회전 축 주위를 회전하는 정도를 결정한다 회전 축에 대한 스칼라 값 w가 커지면 회전의 크기가 커지고, 작아지면 회전의 크기가 작아진다 복소수 실수부 + 허수부의 합 으로 구성된 가장 큰 범위의 수 사원수 특징 행렬보다 연산 속도가 빠르다 메모리 양 적다 결과 오류 적다 Gimbal Lock(짐벌락) 현상 발생 방지 GimbalLock(짐벌락) 현상이란? Gimbal Lock(짐벌락) 현상 : 3축 회전..
해시 코드 ( HashCode )객체를 식별하는 정수 값(Key)이다 KeyData... 6203715 객체의 주소 값을 변환하여 생성한다객체를 비교할 때 드는 비용을 낮추기 위해 사용한다 HaspMap에서 HashCode를 이용하여 객체를 매핑하며 객체를 찾을 때 사용한다 HashCode가 다르면 두 객체는 다르다HashCode가 같으면 두 객체는 같거나 다르다equals()로 비교해서 true면 같고 false면 다르다 Hash의 충돌 Key값이 같을 경우해결법은 개방주소법과 체이닝이 있다 개방주소법(Open Addressing)충돌이 발생한 인덱스를 건너뛰고 빈공간이 있는지 탐색 후 삽입한다.인덱스를 증가시켜주는 안정적 방식체이닝과 달리 포인터가 필요 없고, 추가적인 메모리가 불필요하다삽입/삭..