[C++ 스터디] 열거 타입 (enum), 구조체 (struct)
2022. 7. 5. 20:00ㆍ03. Resources/C, C++
728x90
반응형
열거 타입 (enum)
숫자를 나열하는 방식과 범위를마음대로 정의해서 변수를 선언하는데 활용
체스 말을 const int 로 표현하는 경우
const int PieceTypeKing = 0; const int PieceTypeQueen = 1; const int PieceTypeRook = 2; const int PieceTypePawn = 3; int myPiece = PieceTypeKing; -> myPiece 값이 바뀔 수 있다.
enum 타입을 적용하면 변수에 지정할 수 있는 값의 범위를 엄격하게 제한 → 변수 값의 변경에 관련된 문제 방지 가능
enum PieceType { PieceTypeKing, PieceTypeQueen, PieceTypeRook, PieceTypePawn};
각 멤버에 해당하는 정숫값을 직접 지정할 수도 있음
enum PieceType { PieceTypeKing = 1, PieceTypeQueen, PieceTypeRook = 10, PieceTypePawn};
- 이 경우,
PieceTypeQueen
의 값은 자동으로 1에 1을 더한 값인 2가 되고,PieceTypePawn
의 값은 자동으로 10에 1을 더한 11이 됨
- 이 경우,
엄격한 열거 타입 (strongly typed enum)
타입을 엄격히 따지는 것 = 스트롱 타입 / 타입에 안전하다 / 타입 세이프하다
타입을 엄격하게 적용하기 위해서는 enum class를 사용
enum class PieceType { King = 1, Queen, Rook = 10, Pawn };
이렇게 정의한 열거 타입 값들의 이름은 스코프가 자동으로 확장되지 않음
→ 사용하기 위해서는 스코프 지정 연산자를 사용해야한다.PieceType piece = PieceType::King;
이렇게 정의한 열거 타입 값은 자동으로 정수 타입으로 변환되지 않음
if (PieceType::Queen == 2) -> 이렇게 사용할 수 없음 { ... }
사용하기 위해서는 형변환해서 사용해야한다.
if (static_cast<int>(PieceType::Queen) == 2) { ... }
기본적으로 열거 타입 값은 정수 타입이지만 내부 표현 타입 변경 가능
enum class PieceType : unsigned long { King = 1, Queen, Rook = 10, Pawn };
구조체 (struct)
구조체를 이용하면 타입을 한 개 이상 묶어서 새로운 타입으로 정의 가능
// employeestruct.h struct Employee { char firstInitial; char lastInitial; int employeeNumber; int salary; };
위에서 정의한
Employee
타입으로 선언한 변수는 구조체 내부의 필드를 가짐각 필드는
.
연산자로 접근#include <iostream> #include "employeestruct.h" using namespace std; int main() { // 직원 레코드 생성 및 값 채우기 Employee anEmployee; anEmployee.firstInitial = 'M'; anEmployee.lastInitial = 'G'; anEmployee.employeeNumber = 42; anEmployee.salary = 80000; cout << "Employee: " << anEmployee.firstInitial << anEmployee.lastInitial << endl; cout << "Number: " << anEmployee.employeeNumber << endl; cout << "Salary: " << anEmployee.salary << endl; return 0; }
반응형
'03. Resources > C, C++' 카테고리의 다른 글
[C++ 스터디] LeetCode 코딩 테스트 문제 풀어보기! - Roman to Integer (0) | 2022.08.15 |
---|---|
[C++/CMake] CMakeLists로 C++ 편하게(?) 컴파일 하기 (0) | 2022.07.28 |
[C++ 스터디] 리터럴, 변수, 그리고 연산자 (0) | 2022.07.03 |
[C++ 스터디] 네임스페이스란 (0) | 2022.07.01 |
[C++ 스터디] 소스 코드를 프로그램으로 만드는 과정 (0) | 2022.06.30 |