목록Programing (92)
Prosto
프로그램을 만들 때, 난수를 발생 시키는 경우가 종종 있습니다. 이럴 때 사용할 수 있도록 만들어진 함수가 있습니다. #include // C #include // C++ 에 있는 rand() //seed 값에 따라 난수 발생. (똑같은 상황엔 항상 같은 난수가 나옵니다.) 그러한 것에 대비해 srand()함수로 seed 값을 잡아줄 수 있습니다. srand(time(null))일 경우 현재 시간을 기준으로 시드값을 만들 수 있습니다. (매번 바뀌게 됨.) 단 time 함수를 사용하기 위해선 time.h를 include 해주어야 합니다. 예를 들면, srand((unsigned)time(NULL)); std::cout
이번에는 C++의 큰 장점 중 하나인 이름공간입니다. 혼자가 아닌 여럿이 모여 개발하는 경우가 대부분인데, 이러한 경우 매우 좋습니다. 예를 들어 A, B, C 세 사람이 모여 개발하는 경우, 모두가 같은 이름의 함수를 사용했을 때 충돌이 발생될 수 있습니다. 그렇게 될 경우 엄청난 시간싸움이 될 수도 있죠.. (여기 고치고, 저기 고치고...) 그런 경우에 매우 도움이 되는 것이 바로 namespace 입니다. 셋 모두 Function()이라는 함수가 있을 경우 A의 Function(), B의 Function(), C의 Function() .. 과 같이 각자이름을 붙여 사용되는 것입니다. namespace 이름공간명. { .. } namespace Prosto { void func() {...} } 이..
인라인 함수 공부에 앞서 C의 매크로 함수에 대한 어느정도의 지식이 필요합니다. (매크로 함수의 장점, 단점.. 매크로 함수의 기능 ....) 간단하게 말하면, C의 매크로 함수는 함수 정의를 사용한 경우와 다르게 간단하게 처리를 하여, 성능의 향상을 주는 장점이 있고, 단점으로는 디버깅의 어려움, 함수 정의 방식이 일반함수에 비하여 더 복잡하다는 것이죠. 간단한 코드. #define SQUARE(X) ((X)*(X)) int main(void) { printf("%d \n", SQUARE(5)); return 0; } 위 코드에서 SQUARE(5)가 들어간 자리는 ((5)*(5))로 치환되어 실행됩니다. 인라인 함수는 그러한 매크로 함수의 장점을 이용하여 프로그램의 성능 향상을 위하여 새로 도입된 키워..
C++에서는 매개변수의 디폴트 값을 줄 수 있습니다. int Func(int num=10) { ... } 이라는 함수가 정의되어 있을 경우. main 함수에서 이 함수를 사용할 때 int main() { ... Func(); Func(10); ... } 인자를 전달 하지 않아도, num=10이라는 값을 디폴트 값으로 전달 받도록 합니다. 그러므로, 위의 Func();와 Func(10);은 같은 의미를 가지게 됩니다. 같은 의미로 int Func(int num=10, int num2=20) { ... } 이라는 함수가 정의되어 있을 경우. main 함수에서 이 함수를 사용할 때 int main() { ... Func(); Func(10); Func(10, 20); ... } 인자를 전달 하지 않아도, nu..
C++에서는 C와 다르게 함수 오버로딩이 가능합니다. (같은 이름의 함수를 재정의하고 사용할 수 있습니다.) 이는 int Func() {} int Func(int a) {} int Func(int a, int b) {} int Func(char a) {} 와 같은 형식이 가능한 것입니다. (이름은 같지만 매개 변수형이나 인수 갯수가 다른 함수.) C에서는 컴파일에러가 발생되겠지만, C++에서는 정상적으로 실행됩니다. 그 이유는 C에서와 다르게 C++에서는 함수를 (이름 + 전달인자)로 확인하기 때문입니다. 하지만, int Func() {} void Func() {} 와 같이 반환형만이 다른경우는 불가능합니다. (이름과 전달인자로 확인하고 사용되기 때문.)
전에 C programing을 공부하고, 이제 C++ 공부를 시작했습니다. C는 절차 지향 언어인 반면, C++은 객체 지향 언어입니다. C와 비교하면 몇가지 차이점도 보입니다. 앞으로 천천히 공부해 나가기로 하겠습니다! + C++은 C에 비해서 여러측면에서 대규모 프로젝트를 하는데 적합합니다. 또, 게임을 만들 경우에도 C언어를 그대로 쓰기보다는 C++을 사용합니다. 그 이유는 공부하면서 나오겠지만, namespace라든지, 참조자라든지.. 조금만 공부하다보면 어느정도 이유를 알 수 있을 것이라 생각됩니다. 또, C를 완벽히 모르더라도 C++을 시작해도 됩니다. (저 또한 그렇고요.) C++을 공부해 나가면서 부족하다 느끼는 부분은 다시 한 번 C도 참고하고, 공부하여 부족한 부분을 체워나가며 공부하는..
포인터의 포인터.. int * ptr; 이라는 포인터가 있을 때 int ** dptr; 이라는 것도 있을 수 있습니다. 간단한 예문 #include int main(void) { int na=20; int * ptr = &na; int ** dptr = &ptr; printf("%#x \n%#x \n%#x \n\n", na, ptr, dptr); printf("%d, %d, %d", na, *ptr, **dptr); return 0; } 위에서 볼 수 있듯 na = *ptr = **dptr 결과라는 것을 알 수 있습니다. **dptr -가리킴-> *ptr -가리킴-> na dptr은 ptr의 주소를 가리키고 있고, ptr은 na의 주소를 가리키고 있습니다. 그렇기에 na = *ptr = **dptr이 된..
친구가 소개해준 덕에 오늘은 게임을 만드는 엔진 중 하나인 DarkGDK를 잠시나마 사용해 볼 수 있었습니다. 여러 시행착오를 겪은 끝에 만나 볼 수 있었습니다. (DirectX, DarkGDK... ) (다운로드 - 설치 - 설정 - 실행 ...) 예전부터 게임을 만들어보고 싶어했던 저에게는 좋은 경험이 될 것 같습니다~ (게임 프로그래밍 엔진) 그리고 소개해준 친구에게 이런 저런 설명을 듣고, 어느정도 사용법 등도 들어볼 수 있었습니다. 처음 다운로드 받아 설치하고 업데이트 시킨 후 그리고, 설정을 하고 실행하는데 문제가 나왔습니다! ... ...ㅠㅠ 먼저, 일단 기본적인 설정은 아래와 같이 해야합니다. (Visual Studio) 도구 -> 옵션 -> 프로젝트 및 솔루션 - 하위 항목인 VC++ 디..
저번에 1년 중 1월1일을 구하고 그 1월 달만 구하는 달력을 만들어 보았는데요. (달력 계산) 이번에는 1년 전체 달력을 출력 해주는 프로그램을 만들어보겠습니다. (입력년도의 1월~12월 달력 계산 출력 프로그램.) 필요 : for문, if문, 사용자 정의 함수, 함수, 변수, 배열 (3차원 배열) .... 등을 사용하였습니다. (포인터 사용 안했음.) 예를 들어 달력이 궁금한 년도를 입력하면 그 해의 달력을 출력해주는 것 입니다. 2011년을 입력하면 2011년 달력 (1월, 2월, 3월 ....) 2년을 입력하면 2년... 그리고 달력의 출력형태로는 --------1월-------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25..
포인터란? 포인터는 주소 값을 담고 있는 변수 또는 상수 입니다. *포인터에는 포인터가 가리키는 메모리에 대한 정보가 포함되어 있습니다. (주소 값을 지니며, 참조하는 대상의 자료형 정보도 지니는 상수 또는 변수) 포인터는 같은 TYPE형 변수로 지정해야 합니다. int형 변수는 int형 포인터로. char형 변수는 char형 포인터로. double형 변수는 double형 포인터로... (예) int num=3; int * ptr = # (선언과 동시에 초기화 가능.) 이러한 식으로 이용 가능합니다. 포인터 선언시 *의 앞 뒤 공백은 어떻게 하든 똑같습니다. int * ptr; int* ptr; int *ptr; 모두 같은 의미. 포인터는 4byte 입니다! 변수를 선언 할 때에 int형, cha..