c++
업 캐스팅(Upcasting)과 다운캐스팅(Downcasting)
1. Upcasting과 Downcasting이란 무엇일까? Upcasting은 상속받은 자식 클래스를 부모클래스로 형변화 하는것을 말한다 Downcasting은 기본 클래스 포인터로 처리 할 수 있습니다. 이것은 업 캐스팅입니다. 간단하게 설명하면 이렇지만 단순히 다른 데이터 유형으로 변환한다고 생각하면 큰문제가 발생할수있다. 2. Upcasting 보시다시피 Manager(매니저)와 서기(Clerk)는 모두 직원(Employee)이고, 둘 다 사람(Person)이다. 이는 Manager 및 Clerk 클래스가 Person 클래스의 속성을 상속하는 Employee 클래스의 속성을 상속 함을 의미한다. 예를 들어, Manager 와 Clerk 모두 이름과 성으로 식별되고 급여가 있음을 지정할 필요가 ..
템플릿(Template) 개념정리
1. 템플릿(Template) 이란 무엇인가? 템플릿이란 데이터 타입을 정확히명시하지않고 클래스를 생성할때 데이터타입을 정하므로써 여러자료형마다 각각 오버로딩(overloading) 할필요없이 같은 역활을 하는 클래스, 메소드를 하나만 만들어서 다향한 데이터 타입을 사용하게하는 틀이다. 그렇기때문에 자료형대신 특수하게 약속된 키워드 (주로 한개일때는T 여러개일때는 T1,T2... 로 사용됨)을 사용한다. 템플릿은 크게 함수템플릿(method template)과 클래스 템플릿(class template)으로 나눠지는데 하는역활은 비슷하다. 2. 예제 템플릿을 사용하는곳은 많지만 대표적으로 사용하는 자료구조중 하나인 스택(stack)에서 사용하는 예제와 싱글톤패턴(singleton pattern)에서 사용하..
void 포인터란?
1. void 포인터란 (사전적 의미)? - void 포인터는 const, volatile를 사용하여 선언되지 않은 객체를 포함한 모든 자료형 변수를 가리킬 수 있는 있다. - 가리키고 있는 변수의 자료형의 크기, 길이를 알아올 수 없을 뿐이다. 시작 주소를 제공 받아 쓸 수 있는 것이다. - 함수를 가리키는 주소값을 저장하여 함수형 포인터로 사용할 수 있다. - 다른 이름으로 제네릭 포인터(generic pointer)라고 불린다. - void 포인터는 자신이 가리키는 변수가 어떤 자료형인지 알지 못하기 때문에 직접 역참조를 할 수 없다. - 그러므로 void 포인터의 역참조를 수행하기 위해서 가리키고 있는 변수의 자료형으로 형 변환을 해야만 한다. - void 포인터의 포인터 연산도 역참조와 마찬가지..
포인터(pointer)와 함수포인터
1. 포인터(pointer) C언어에서 포인터(pointer)란 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 부릅니다. char형 변수가 문자를 저장하고, int형 변수가 정수를 저장하는 것처럼 포인터는 주소값을 저장합니다. 비유 해서 설명해보자면 아래와 같습니다. 택배 아저씨가 하는 일 ! 고객의 주소를 저장하고 있다가 해당 주소로 물건을 전달하는 일 ! 고객의 주소를 저장하고 있다가 해당 주소로 물건을 받아가는 일 ! ‘우리에게 ‘간접 접근’ 서비스를 제공한다.’ 택배 아저씨가 있어서 우리가 편리한 점 물품을 수령하기 위해 직접 구매처를 방문 하지 않아도 된다. 반품을 위해 직접 구매처를 방문 하지 않아도 된다. 컴퓨팅 세계에서 택배 아저씨와 같은 일을 하는 변수 ! 포인터 변수 (포인터라..
슬라이딩 퍼즐 구현하기
1. 슬라이딩 퍼즐 규칙?? - 플레이어는 4x4판에 0부터 15까지 숫자가 랜덤한위치에 존재 - 플레이어는 0(여기서는 #으로 표시)을 위아래좌우로 움직여서 정렬하면 클리어 2. 사용된 키워드 - 중복되지 않는 난수발생기 - 셔플알고리즘 - 구조체를 매개변수로 넘길때 참조형으로 넘김 - 숫자판을 2차배열로 구현하여 위아래로 움직이기기 편해짐 - _getch를 이용해서 방향키 입력시 즉시이동하여 조금더 게임같아졌다. - 슬라이딩퍼즐은 마구잡이로 셔플시 풀수없는경우가 존재하기때문에 알고리즘을 이용하여 풀수있는지 확인한다. (https://natejin.tistory.com/22?category=1028752) 3. Git-Hub https://github.com/Natejin/CodeTest/tree/ma..
빙고 게임 구현하기
1. 빙고게임 규칙?? - 플레이어와 컴퓨터는 각자 5x5판에 1부터 25까지 숫자가 랜덤한위치에 존재 - 플레이어와 컴퓨터가 돌아가면서 1개의 숫자를 말하고 5개의 숫자가 가로 세로 혹은 대각선에 있을시 빙고 - 둘중 빙고를 3개 성공시 해당플레이어는 승리하고 게임 종료 2. 사용된 키워드 - 중복되지 않는 난수발생기 - 컴퓨터와 플레이어의 데이터 저장하는 자료구조는 구조체를 사용 - 컴퓨터와 플레이어가 공유하는 불러진 숫자판은 배열체 자료구조를 전역변수로 사용 - 구조체를 매개변수로 넘길때 참조형으로 넘김 - 배열을 이차배열이 아닌 1차배열로 구현 (이유는 연습) 3. 코드 #include #include #include #include #include using namespace std; //빙고만..
야구게임 구현하기
1. 야구게임 규칙?? - 컴퓨터가 고른 중복되지않은 3자리의 숫자를 맞추는 게임. - 자리수는 맞지않지만 플레이어가 입력한 숫자가 컴퓨터가 고른숫자에 존재하면 볼 - 자리수와 숫자가 맞으면 스트라이크 - 최대한 빠른시간 내에 컴퓨터의 볼을 맞춰라 2. 사용된 키워드 - 중복되지 않는 난수발생기 - 컴퓨터의 랜덤값을 저장하는 자료구조 (여기서는 배열을 사용) 3.코드 void BaseBallGame() { int playerPos[3], comPos[3], result[3]; bool playerNumUsed[9] = {}; bool comNumUsed[9] = {}; int strike = 0; int ball = 0; int match = 1; srand(time(NULL)); //컴퓨터 랜덤 값 구..