본문 바로가기

분류 전체보기

(236)
섯다 2.0 ver 앞서 만들었던 섯다에서 더 많은 족보 추가 열거형(enum)을 추가하여 가독성 향상 Card 구조체 추가 족보 계산 함수 수정 플레이어 카드 정렬을 위한 Swap() 함수 추가 플레이어 Print() 함수 수정 #include #include #include using namespace std; //족보 숫자 enum JOKBO { MANG = -1, KK_0, KK_9 = 9, GABO = 13, SEARUK, JANGSA, JANGBBI, GUBBI, DOKSA, ALLi, DD_1 = 21, DD_10 = 30, KD }; //카드 구조체 struct Card { int month; string shape; }; //플레이어 구조체 struct Player { string name; int mone..
C++ 배우기 17(SAL, 표준 라이브러리) SAL(Standard Annotation Language) Microsoft 소스 코드 주석 언어라고 부르며, 이는 함수의 매개변수를 어떻게 사용하는지 설명해줄 수 있는 주석이다. 헤더 파일 안에 정의되어 있다. 위와 같이 함수의 매개변수 앞(__inout)에 사용할 수 있다. 코드를 보았을 때, 이 매개변수가 어떻게 작동하는지 설명할 수 있어 규모가 큰 팀 단위 개발일 때 사용하기도 한다고 한다. __inout뿐만 아니라 다양한 주석 또한 존재한다. _In_호출된 함수에 대한 입력 _Inout_호출된 함수에 대한 입력 및 호출자에게 출력 _Out_호출자에게 출력 _Outptr_호출자에 대한 포인터의 출력 이처럼 각 SAL마다 의미가 있어서 상황에 맞게 잘 쓰면 개발자가 함수를 사용하는 방법을 더 잘 ..
섯다 중간에 ==과 =의 어이없는 실수 때문에 한참을 애먹어서 완성까지 거의 10시간이 걸린 듯하다ㅠㅠ 입력하면서 점점 코드가 길어지니까 오류 한번 나면 어디서 나는지 찾는 게 쉽지 않았다;; 빌드하고 돌려보면서 느끼는 건데 삼팔광땡이 생각보다 잘 나온다. 이게 맞나? #include #include #include using namespace std; struct Player { string name; int onecard; int twocard; int money = 10000; int result; }; //카드 출력 시 ~"광" 유무 판별 함수 void CardPrint(int card) { switch (card) { case 1: cout
C++ 배우기 16(함수 오버로딩) 함수 오버로딩 함수의 이름은 같지만 매개변수에서의 차이(자료형, 개수)를 두고 사용하는 것을 말한다. 위 사진처럼 함수의 이름이 모두 같지만, 매개변수의 차이를 두고 있다. 따라서 이름은 같지만 서로 다른 함수처럼 작동할 수 있는데, main() 함수에서 호출할 때 매개변수를 어떻게 호출하냐에 따라서 호출되는 Func() 함수가 달라진다. 그런데 여기 이름은 같지만 매개변수가 다른 두 개의 Func() 함수가 있다. 대충 봐서는 함수 오버로딩이 되어 작동할 수 있을 것 같지만, 실제로는 작동하지 않는다. 바로 매개변수에 a = 10이라는 디폴트 값을 대입해버렸기 때문이다. 이런 걸 디폴트 매개변수라고 부르는데, 이런 매개변수는 같은 개수의 매개변수를 가진 함수와 겹치거나, 사실상 아예 존재하지 않는 것과..
더블포인터 빙고 vs Computer 평소에는 Com의 값이 랜덤으로 나오지만, Com의 빙고판에서 빙고까지 하나만 남았다면 무조건 그 값을 출력하도록 만들었다. 점점 코드가 길어져서 다시 보면 나도 이해 못 할지도...ㅠㅠ #include #include #include #include using namespace std; //스왑 void Swap(int** bingo, int sour1, int sour2, int dest1, int dest2) { int temp = bingo[sour1][sour2]; bingo[sour1][sour2] = bingo[dest1][dest2]; bingo[dest1][dest2] = temp; } //셔플 void Shuffle(int** bingo, int size) { for (int i = 0..
C++ 배우기 15(더블 포인터, 참조형, 함수 호출 방식) 더블 포인터(이중 포인터) 먼저 포인터는 주소를 가리키는 역할을 한다고 했다. 그렇다면 더블 포인터는 무슨 역할을 할까? 더블포인터는 포인터의 주소를 가리키는 역할을 한다. 쉽게 보자면 이런 식으로 포인터들이 작용한다고 보면 될 것 같다. 포인터 < 더블포인터 < 삼중 포인터 < 사중 포인터... 이렇게 서로의 주소값을 나타낼 수 있다는 것을 알아두면 되겠다. 하지만 우리는 이번에 더블 포인터를 가지고 2차원 배열을 다뤄보도록 할 것이다. 앞서 배웠던 동적 할당하는 방법, new ~ delete를 이용하여 2차원 배열을 선언하겠다. 먼저 2차원 배열을 담기 위한 더블 포인터 자료형을 만들어준다. (int** bingo) 그리고 변수 bingo에 동적 할당을 해주기 위해선 bingo가 더블 포인터이기 때문..
더블포인터 빙고 더블포인터로 2차원배열을 만들어서 각 함수의 매개변수로 활용하는 부분에서 조금 헷갈렸다.ㅠ #include #include #include using namespace std; //스왑함수 void Swap(int sour1, int sour2, int demp1, int demp2, int** bingo) { int temp = bingo[sour1][sour2]; bingo[sour1][sour2] = bingo[demp1][demp2]; bingo[demp1][demp2] = temp; } //셔플함수 void Shuffle(int size, int** bingo) { int sour1 = rand() % size; int sour2 = rand() % size; int demp1 = rand() ..
C++ 배우기 14(동적 할당) 동적 할당(new ~ delete) 우리가 앞서 배웠던 메모리 구조에서 힙 영역에 해당하는 부분이다. 힙 영역의 특징과 같이 크기에 상관이 없다. C 스타일 언어에서 동적 할당에는 malloc, realloc, calloc, free와 같은 것들이 있지만, 우리가 배우는 C++ 스타일에서의 동적 할당은 new와 delete만 알면 된다. 우선 int자료형의 *p 변수는 main함수 안에 선언한 지역변수이므로 스택 영역에 저장이 된다. 그런데 우리가 동적 할당을 해주면 해당하는 값을 힙 영역에 담을 수 있게 된다. *p에 new int(3)로 동적할당을 해주면, int형 정수 3이 힙 영역에 동적 할당되고, *p에는 그 주소가 담기게 된다. 그래서 첫 번째 cout 출력 시, *p에 담긴 주소 값이 가리키..