전체 글

C++기초

220324(1)_함수(2)_함수의 오버로딩, 디폴트 인자

#include int Add(int Number1, int Number2) { return Number1 + Number2; } //위 함수에는 정수만 넣을 수 있다. //만약에 소수점을 넣으면 소수점이 잘리게 될 것이다. //만약에 우리가 float 타입을 연산하면 float 타입을 반환하고 싶으면 //새로 함수를 만들어야 된다. /* 함수의 오버로딩: 같은 이름으로 함수를 만들어줄 때 인자의 개수 혹은 타입이 서로 다를 경우 같은 이름으로 함수를 정의하는 것이 가능하다. 이를 함수의 오버로딩이라 한다. cf)네임 맹글링 반환타입은 함수의 오버로딩에 영향을 줄 수 없다. 무조건 인자의 갯수 혹은 타입으로만 함수 오버로딩을 할 수 있다. */ float Add(float Number1, float Nu..

C++기초

220323(6)_함수를 활용한 숫자야구

//220317의 NumberBaseball 숫자야구 코드를 함수로 나누어서 리팩토링한 것 #include #include void SetNumber(int* Array) { for (int i = 0; i < 9; ++i) { Array[i] = i + 1; } for (int i = 0; i < 100; ++i) { intIdx1 = rand() % 9; intIdx2 = rand() % 9; intTemp = Array[Idx1]; Array[Idx1] = Array[Idx2]; Array[Idx2] = Temp; } } void Check(int* Number, int* Input, int& Strike, int& Ball) { for (int i = 0; i < 3; ++i) { for (int..

C++기초

220323(4) - 함수(1)

#include /* 함수: 원하는 코드를 모아서 구현을 해놓은 뒤에 원할때마다 해당 코드를 동작시켜줄 수 있게 해주는 기능을 함수라고 한다. 함수의 형태 반환타입 함수이름(인자) { 동작시킬 코드 } 반환타입: 이 함수를 동작시키고 이 함수에서 원하는 결과가 있을 경우 그 결과를 얻어오고자 할 때 해당 결과의 변수 타입을 지정하면 된다. void를 반환타입으로 사용한다면 결과를 반환하는 것이 없다. 라는 의미로 사용하게 된다. int를 반환타입으로 사용한다면 이 함수를 실행하고 결과로 정수를 얻어오고자 할 때 int를 반환타입으로 사용하는 것이다. return 키워드를 이용해서 함수의 결과를 반환한다. 함수이름 : 원하는대로 이름을 만들어 줄 수 있다. 단, 이 함수가 수행하는 기능에 맞는 이름을 잘 ..

C++기초

220323(3) - 참조(Reference)

#include int main() { /* 레퍼런스 : 다른 변수를 참조하여 값을 컨트롤 할 수 있다. 포인터와 비슷한 기능을 하지만 포인터는 C언어에서도 지원하는 반면 레퍼런스는 C++ 버전의 포인터이다.(좀 더 사용하기 쉬운 포인터) 처음 한번 참조하는 대상이 지정되면 다른 대상을 참조할 수 없다. 장점: 역참조를 할 필요가 없다.(바로 접근이 가능하다) int&

C++기초

220323(2) - 구조체(Structure)

#include //구조체도 우리만의 변수 타입을 만들어내는 문법 중 하나이다. //enum과 비슷함. /* 구조체 : 서로 다른 타입의 변수 여러개를 한번에 묶어서 하나의 사용자정의 변수 타입으로 만들어줄 수 있는 기능이다. 서로 다른 변수 여러개를 여러개 모아서 사용할 수가 있기 때문에 엄청 많이 쓰임 struct라는 키워드를 이용해 만들 수 있다. struct 구조체이름 { 원하는 변수 선언 }; */ struct MonsterInfo { charName[32]; intAttack; intArmor; intHP; intMP; }; struct Test { char A; int Number; }; struct Test2 { char A; char B; int Number; }; struct Test3..

C++기초

220323(1) - 지난번에 만들었던 야구게임 함수로 정리하기.

//원본 야구게임 코드. #include #include int main() { srand((unsigned int)time(0)); int Random = rand(); intNumber[9] = {}; for (int i = 0; i < 9; ++i) { Number[i] = i + 1; } for (int i = 0; i < 100; ++i) { intIdx1 = rand() % 9; intIdx2 = rand() % 9; intTemp = Number[Idx1]; Number[Idx1] = Number[Idx2]; Number[Idx2] = Temp; } while (true) { std::cout

C++기초

220322 - 동적 할당(Dynamic Allocation)

#include #include //crt debug라는 헤더. 메모리 릭이 발생했는지 확인해주는 헤더 int main() { //아래 코드를 이용해서 메모리 릭을 체크할 수 있다. /*단, Ctrl + F5를 이용해서 실행을 하면 릭이 체크가 안된다. 릭을 체크하고자 한다면 F5(디버그 모드 실행)을 이용해서 실행하면 릭이 있을 경우 출력창에 릭을 알려준다.*/ _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); /* 동적할당 : 메모리를 시작할 때 만들어주는 것이 아닌 필요한 순간에 공간을 만들어주는 기능이다. 메모리를 내가 원할때 쓰고 제거하는 것이 가능. 효율적으로 쓸 수 있다. new와 delete 키워드를 이용해서 동적으로 메모리를 할..

C++기초

220322 - 포인터(Pointer)_2

#include int main() { /* 포인터 연산 : 덧셈, 뻴셈을 지원한다. 일반적인 사칙연산은 1을 더할 경우 단순하게 값이 1이 증가하게 되지만 포인터의 경우 1을 더하면 단순하게 1이 증가하는 개념이 아닌 해당 포인터 타임(int면 int, float 포인터 이면 float)의 메모리 크기만큼이 증가하게 된다. 즉, 2를 더하게 된다면 int포인터일 경우 int의 크기인 4바이트 * 2만큼 메모리주소의 값이 증가하게 되는 것이다. 배열의 index 접근 = 포인터 연산 */ int intArray[10] = {}; for (int i = 0; i < 10; ++i) { intArray[i] = i + 1; //Array = 배열의 시작 주소 } int* intpArray = intArray..

연습 노트

220323 함수를 사용한 빙고게임 - 내 코드와 선생님 코드 비교

//내가 짠 코드. #include #include enum class Difficulty { Min, Easy, Hard, Max }; void Shuffle(int* UserBoard, int* AiBoard);//빙고판 섞는 함수 void BoardPrint(int* UserBoard, int* AiBoard); int UserInput(int* UserBoard, int* AiBoard, bool* Avbl); void AiPick(int* UserBoard, int* AiBoard, bool* Avbl, int Stage); void BingoLineCheck(int* UserBoard, int* AiBoard, bool* Avbl, int Stage, int& userBingo, int& ai..

C++기초

220321(2) - 포인터(Pointer)

#include int main() { /* 포인터 : 메모리 주소를 저장하는 변수 타입이다. int, float 등 모든 변수 타입은 포인터 타입을 선언할 수 있다. 그래서 int변수의 주소는 int포인터 타입의 변수에 담을 수 있고 float변수의 주소는 float 포인터 타입의 변수에 담을 수 있다. 변수의 주소를 선언할때는 변수 앞에 & 을 붙여주면 해당 변수의 주소가 된다. 32비트 타겟의 프로그램은 메모리 주소가 16진수 8자리가 나오게 되고 64비트 타겟의 프로그램은 메모리 주소가 16진수 16자리가 나오게 된다. 즉, 포인터 변수는 메모리 주소를 저장하는 변수이므로 32비트 타겟에서는 4바이트가 되고, 64비트 타겟에서는 8바이트가 된다. *포인터 사용시 주의할 점: 이미 지워진 메모리를 ..

C++기초

220318 - 빙고 게임 만들기

////저번에 만든 빙고 게임에 AI를 추가해서 1:1 대전을 만들기. 이번에 추가한 주석은 // 두개를 추가하였음. #include #include ////AI의 난이도 설정 enum class AIType { None, Easy, Hard, Max //Easy와 Hard는 정상적인 값, None와 Max는 잘못 입력되었을때의 값. }; int main() { srand((unsigned int)time(0)); int Random = rand(); ////난이도 입력 받기 int AIState = 0; while (true) ////잘못 선택되었을 떄를 대비한 while문 { system("cls"); std::cout

카테고리 없음

220317(3) - 숙제: 숫자야구 게임 만들기

/*규칙 1 ~ 9 사이의 랜덤한 숫자중 3개를 얻어온다. 숫자는 중복되면 안된다. 3개의 숫자는 * * * 이런식으로 표시를 한다. 플레이어는 숫자 3개를 입력한다. 5 9 2 를 맞춰야 한다면 플레이어가 1 3 4 입력했다면 서로 같은 숫자가 없으므로 Out을 표시한다. 플레이어가 5 7 8 을 입력했다면 5는 숫자도 같고 위치도 같으므로 strike 나머지 2개는 같은 숫자가 없으므로 1strike 0ball이다. 5 2 9 를 입력했다면 5는 위치도 같고 2 와 9는 숫자는 같지만 위치가 다르므로 1strike 2ball 출력한다. 5 9 2 를 입력하면 종료된다. */ #include #include int main() { srand((unsigned int)time(0)); int random..

hyrule
C++ 프로그래밍 공부