#include #include class cComputer// abstract class (추상클래스){public:enum{NOTEBOOK= 1,DESCTOP}; virtual void getCategory() = 0;}; class cNotebookComputer : public cComputer{public:void getCategory(){printf("Notebook Compuer\n");}}; class cDesctopComputer : public cComputer{public:void getCategory(){printf("Desctop Computer\n");}}; class cComputerManager // Factory Method{public:static cComputer* ge..
* 이 방법은 Project Ex에서 사용한 방법입니다. * DirectX에서 랜더링할때 Radian값을 설정해 회전하는 방식으로 했습니다. 공식자체는 다른곳에서 사용해도 무관할듯 합니다. * 이미지의 중심점을 축으로 회전을 시키는 방식입니다. - 이미지의 밑변과 높이를 구한다. 높이 = 나중좌표.y - 이미지의 중심점.y; 밑변 = 나중좌표.x - 이미지의 중심점.x; * 만약 이미지의 밑변이 0이라면 강제적으로 1로 값을 넣어줘야 정확한 회전각이 나옵니다. 회전은 시계방향으로 회전을 하게 됩니다. 따라서 중심을 축으로 왼쪽은 +각도, 오른쪽은 -각도가 나오게 됩니다.(180도 기준) if(밑변 < 0) 회전각 = 아크탄젠트(높이/밑변) * 180도 / 원주율(3.14); else 회전각 = 아크탄젠트..
float _Height = (float)abs(MOUSEINTERFACE.getPoint().y - mCenter.y); // 현재 캐릭터의 좌표와 마우스와의 좌표 사이의 높이를 구해준다. float _Bottom = (float)abs(MOUSEINTERFACE.getPoint().x - mCenter.x); // 현재 캐릭터의 좌표와 마우스와의 좌표 사이의 밑변의 길이를 구해준다. float _R = sqrt((_Height*_Height) + (_Bottom*_Bottom)); // 빗변을 구하는 공식. // 길이 = 속도(이동픽셀) * 시간 => 시간 = 길이 / 이동 픽셀 float _S = _R/3; // 시간을 X또는 Y축과 나누면 그 축으로 시간만큼 얼마나 이동해야 정해진 시간안에 목표에..
cos(), sin() 함수로 간단하게 구할 수 있다. 우리는 현제 원점(x1,y1)과 또다른 점(x2,y2), 그리고 각도θ를 알 고 있다. 회전운동을 하기 위한 점을 (x3,y3)라 정하면, 먼저 (x1,y1), (x2,y2)의 거리를 구한다.. bottom = (x2 - x1); height = (y2 - y1); 위에서 구한 길이를 토대로, (x3,y3)의 값을 구해준다. x3 = cos(θ) * bottom - sin(θ) * height; y3 = sin(θ) * bottom + cos(θ) * height; 이렇게 구한 (x3,y3)좌표를 계속 구해(x1,y1)과 지속적으로 더하면, x1 += x3; y1 += y3; 최종적으로 저런 형태의 식이 나오며, 직선은 회전운동을 하게 된다.
#include #include #include using namespace std; class cMagicSquare{public:cMagicSquare(int _dim);~cMagicSquare(); private:int**mP;intmDim; public:voidsetDim(int _dim);voidsetMagic(); intgetDim(); voidshowMagic();}; cMagicSquare::cMagicSquare(int _dim){mDim= _dim; mP= new int*[_dim];for( int i = 0; i < _dim; i++ ){mP[i]= new int[_dim];}} void cMagicSquare::setDim(int _dim){mDim= _dim;} void cMagi..
--void* malloc(size_t _Size);-- int* pA = 0; pA = (int*)malloc(sizeof(int));=> pA에 int의 size 만큼 동적 할당. pA = (int*)malloc(sizeof(int)*n);=> pA에 int의 size만큼 n개 동적 할당. ( pA[n] ) --new-- int* A = 0; pA = new int;=> pA에 int의 size만큼 동적 할당. pA = new int[n];=> pA에 int의 size만큼 n개 동적 할당. ( pA[n] ) int** pA; pA = new int*;=> pA[0];pA[0] = new int;=> pA[0][0]; pA = new int*[n];=> pA[n];pA[n] = new int[i];=>..
정적 멤버변수 & 정적 멤버함수-> 동일한 클래스로부터 생성되는 객체에 의해 공유되는 변수: Color 클레스의 정적 멤버변수 A를, Color 클레스로 생성된 모든 객체에서 공유하여 사용.-> static 키워드를 이용하여 지정-> 객체의 생성 없이도 사용 가능-> static 멤버변수가 별도의 static 영역에 저장되기 때문 정적 멤버변수 class Color { private: static int s_count; }; int Color::s_count = 0; int main() { // main 프로그램 영역 } -> 객체가 만들어질 때 생성되는 것이 아님.=> 프로그램 내부의 적절한 위치에서 위와같이 전역 변수와 동일한 방법으로 초기화.-> 생성 및 사용 시 범위 연산자 ::(Scope Res..
객체 포인터-> 1. 파생 클래스의 객체를 가리키는 기본 클래스의 객체 포인터를 사용할 수 있음.-> 2. 기본 클래스의 객체를 가리키는 파생 클래스의 객체 포인터는 사용할 수 없음. class Animal { public: void breathe(); }; class Fish : public Animal { public: void breathe(); }; Animal* a = new Fish; // 1. 가능 Fish* f = new Animal; // 2. 불가능 -> 3. a->breathe();를 호출하면, class Animal(기본클래스)의 breathe() 함수가 호출 됨. 가상 함수(virtual function)-> 상속 관계에 있는 클래스를 객체 포인터 형태로 사용할 때 의미가 있음.-..
함수 템플릿(Function Template) : 범용 형을 다룰 수 있는 함수의 정의를 의미- 매개변수의 자료형을 지정할 필요가 없음.- 함수 템플릿은 반환형이나 인자의 자료형은 다양하지만, 알고리즘은 동일한 함수를 만들 때 유용 template T Add(T a, T b) { // 인자 a, b 를 이용한 로직 구현 } void main(){ int i = 100; int j = 200; double k = 3.14; double l = 1.58; long m = 7000; long n = 8000; using namespace std; cout