@ 16. 1 ~ 17. 1/면접관련
-
friend 키워드의 의미?@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 19:49
private 건 protected건 friend로 선언된 대상에게는 완벽하게 public으로 작용한다. 대상이 외부이건 상속관계도있건 그런것은 중요치 않다.friend 키워드는 당하는 쪽에서 선언하게 되어 있다. 1. 명시적으로 지정한 대상만 friend만 된다.2. firend지정은 전이되지 않으며, friend의 friend 관게는 인정하지 않는다. 3. 복수의 대상에 대해 동시에 friend를 지정할 수 있지만, 한번에 하나씩만 가능하다.4. friend 관계는 상속되지 않는다. 1번 : 키워드를 선언한 객체에 대해서 선언 받은 대상은 얼마든지 접근할 수 있지만, 반대로는 전혀 접근할 수 없다.(물론 서로 키워드를 남발하면 가능함)2번, 4번 : A가 B를 friend로 선언했어도 B의 frien..
-
참조와 포인터 차이점, 지역변수 참조반환하지말것!@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 19:36
참조만의 특징1. 초기화가 필요하다포인터의 경우 무엇을 가리키는지 알 수 없는 것도 만들수 있다.int *ptr;하지만 참조의 경우int &ref; 는 안된다. 2. 가리키는 대상을 변경할 수 없다.포인터는 도중에 가리키는 대상을 변경할 수 있다.int a;int *ptr=&a;int b;ptr=&b;이런식으로 변경이 가능하지만참조는..int &ref=a;ref=b; 이러면 에러다.. 3. 첨자를 붙일 수 없으며 숫자도 더할 수 없다.포인터의 경우int *ptr=&a;ptr[3]=2;ptr+=2; //주소값이 변한다 8byte이 가능하지만..참조는..int &ref=a;ref[3]=2; // 안된다.ref+=2;그냥 a에 2를 더한값이다. 지역변수 참조반환하지 말아야 하는 이유오늘은 메모리에 관해 좀 재..
-
void 형 포인터@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 19:19
void형 포인터란 모든형(char int double 등)의 주소를 저장할 수 있는 포인터이다.char형과 int형 주소 모두를 저장해야하는 경우라면..void포인터를 사용하여 저장해야한다.int num=1;char a='a';void *vp;vp=#vp=&a;이렇게 가능은 한데..즉 주소를 저장할 수는 있지만..*vp 처럼 주소가 가지고 있는 값에는 접근을 못한다.어떤 형태로 접근해야할지 모르니까...근데 형변환을 하면 가능해진다.즉, *(int*)vp; *(char*)vp 이런식으로..
-
문자열 관련@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 19:18
char *cp = "ABCD";이런식이면..cp[0], cp[1], cp[2] 이런식으로 접근이 가능함..*cp = "ABCD"의 뜻은 포인터 변수에 문자열을 저장하라가 아니라..문자열의 시작주소(예:123123)를 포인터 변수에 저장하라는 의미이다.또한 배열로도 가능하다.char p[10] = "ABCD";배열도 연속적인 메모리이기 떄문에 가능하다.근데..*cp의 문자열은 상수영역의 메모리에 저장되서 수정이 불가능하고(cp[0]='z' 불가능)p[10]은 변수 영역이므로 변경이 가능하다.(p[0]='z' 가능) "" : 문자열을 의미하며 메모리에는 '\n' 문자가 저장되어 있고 문자열의 시작주소를 char * 포인터네 저장가능함..즉 널문자 문자열 포인터문자열 리터럴(문자열 상수) : 큰 따옴표로 둘..
-
C++ 템플릿의 종류@ 16. 1 ~ 17. 1/면접관련 2017. 1. 4. 19:06
1. 함수 템플릿2. 클래스 템플릿 두 종류의 템플릿은 정확히 동일한 방식으로 동작하지 않는데, 가장 명백한 차이는 오버로드 유무이다.보통의 C++클래스와 마찬가지로 클래스 템플릿 역시 오버로드를 할 수 없다.역시 C++함수와 마찬가지로 함수 템플릿 역시 오버로드가 가능하다.// 클래스 템플릿template // Aclass X {}; // 오버로드된 두 개의 함수 템플릿template // Bvoid function(T t) {} template // Cvoid function(int i, T t) {} 위 템플릿들처럼 특수화되지 않은 템플릿들을 기본 템플릿이라고 한다. 기본 템플릿들은 특수화 될 수 있다. 클래스 템플릿은 완전 / 부분 특수화가 모두 가능하나, 함수 템플릿은 완전 특수화만 가능하지, ..
-
C++ 정리(게임개발자를 위한 C++ 참고)@ 16. 1 ~ 17. 1/면접관련 2016. 12. 28. 23:11
실행시간에 메모리가 할당 : 동적 메모리 할당일반적인 변수 선언문 같은것은 컴파일 시간에 변수의 메모리 위치가 결정 : 정적 메모리 할당 바인딩 : 변수나 함주의 주소를 결정하는 것을 바인딩이라고 한다. C의 Malloc과 C++ new의 차이점1. 동적 메모리 할당이 빈번히 사용됨에도 불구하고 함수인것이 못마땅함..C++에서는 동적 메모리 할당이 함수에서 연산자로 승격되었다.연산자는 함수보다 훨씬 유동적이고 함수 호출의 오버헤드가 없다. 또한 C에서 하던 매번 형변환의 불필요한 연산이 없어진다.(C의 경우 (int*)malloc(2) 이런식인데 C++ 의 경우 ip = new int; 이런식이다)2. new는 메모리 할당과 동시에 초기화를 하는것을 허락한다. 함수의 시작 주소를 다른 변수에 저장할 필요..
-
3D 좌표, 투영관련@ 16. 1 ~ 17. 1/면접관련 2016. 12. 21. 00:47
투영변환클리핑이란 : 뷰 좌표계 중 일부를 클립하는 역할을 한다. 이떄 잘라버리는 부분은 카메라에서 보이지 않는 부분이다. 카메라에서 보이지 않는 부분을 삭제한 육면체 영역을 뷰 프러스텀이라 한다.뷰 프러스텀을 정규 뷰 볼륨이라하는 각 정점 좌표가 정규화된 정육면체로 변환하는 것이 바로 프로젝션 변환이다. 근평면보다 커야 할 원평면이 결과적으로 같은 크기가 되므로,뷰 프러스텀을 무리하게 정육면체 모양으로 찌부러뜨린다고 생각하면 정규 뷰 볼륨에서는 원평면에 가까워지면 가까워질수록..오브젝트의 응축도가 높아진다. 반대로 근평면에 가까워질수록 비율적으로는 커진다. 이런 프로젝션 변환 방법을 원근투영이라한다.. **오클루전 컬링 : 카메라에서 보이지 않는 오버드로된 부분의 그리기 처리를 생략할 수 있다. 직교투..
-
포트폴리오 예상질문@ 16. 1 ~ 17. 1/면접관련 2016. 12. 16. 20:54
스타2* 전체적인 UI를 구현할떄 직교투영 행렬을 활용 D3DXMatrixOrthoLH(&m_matProj, WINCX, WINCY, 0.f, 1.f);//여기서 중요한건 월드가 단위 행렬이란것이다.m_matView._11 = fSizeX;//사이즈 해놓고..스케일 행렬m_matView._22 = fSizeY;m_matView._33 = 1.f; //아하..아래 연산으로 모니터의 중앙값이 0,0이 된다..//직교투영을 하면 화면의 가운데가 0, 0 인 좌표가 된다.화면의 왼쪽 끝이 - 400.f 일 것이고 화면의 오른쪽 끝직교투영도 3D 공간상이기때문에 회전 이동이 가능하다. 월드 셋팅이 된다는 것이다.월드셋팅되기때문에 카메라이동시 위치가 틀리면 안보인다는 것이다. 그래서 인터페이스를 만들때 이점을생각해..