3.1.1 이 책에서 공통으로 사용하는 것들

앞으로 이 책에서 사용할 클래스 ehglobal을 소개를 하겠습니다. ehglobal 클래스에는 이 책에 소개되는 전반적인 예제 프로그램에서 공통으로 사용할 만한 함수들을 정적 멤버 메서드로 캡슐화되어 있습니다. 이 책에 공통으로 사용 가능한 것들에 대한 정의에서는 형식 명과 메서드 명 모두 소문자만을 사용하고 있습니다.

 

clrscr 메서드는 단순히 콘솔 화면을 지우는 cls 명령을 system 함수를 이용하는 호출하는 것 밖에 없어요. 여기에서는 자주 사용하는 함수들을 ehglobal 클래스의 정적 멤버 메서드로 캡슐화하여 사용자 편의를 제공하는 것 외에는 특별한 의미가 없습니다. 여러분께서 의미 없다고 생각하시면 무시하셔도 상관없어요.

 

timeflow 메서드는 Windows API에서 제공하는 Sleep을 이용하여 원하는 시간동안 지연시킵니다.

 

정수를 입력받는 메서드로 getnum을 구현합시다. istream 개체인 cin을 사용하여 cin>>num; 처럼 정수를 입력받으면 사용자가 정수가 아닌 다른 문자를 입력하면 버퍼에 계속 남아있어 이후의 입력에서 문제가 발생할 수 있어요.

여기에서는 cin개체의 getline 메서드로 사용자가 입력한 stream을 지역 변수에 입력받은 후에 버퍼를 지우고 입력한 내용을 정수로 변환하여 반환할게요.

참고로 stream은 아스키코드의 연속된 나열로써 연속의 끝은 ‘\n’입니다. 그리고 문자열은 ‘\0’가 오기 전까지의 아스키코드의 연속된 나열입니다.

 

문자열을 입력받는 메서드로 getstr을 구현합시다. 마찬가지로 cin>>name; 과 같은 형태로 문자열을 입력받으면 공백이나 탭이 중간에 입력하면 그 이전까지만 입력받습니다. 그리고 입력 버퍼에는 여전히 그 이후의 문자들이 남아있어 다음 입력 요청에 문제가 발생할 수 있어요. 이를 방지하기 위해 getstr을 제공합시다.

 

그리고 메뉴를 입력받는 작업과 같이 기능 키를 입력받기 위한 메서드 getkey를 제공하겠습니다. 여기에서는 F1~F10까지와 ESC를 제공하기로 하겠습니다.

먼저 이와 같은 키를 사용하기 쉽게 열거형 keydata로 정의하세요.

 

기능 키를 입력받는 메서드에서는 사용자로부터 입력받은 키를 keydata 형식에 열거된 값으로 변환하여 반환하도록 하겠습니다. 

getch 함수를 호출하였을 때 ESC 키를 누르면 27을 반환합니다. 즉, getch 함수가 반환하는 값이 27인 경우에는 keydata 형식에 열거된 ESC를 반환하게 하였습니다.

 다음은 공통으로 사용할 ehglobal.h 와 ehglobal.cpp 파일에 작성한 내용입니다.