Search…

typedef và enum

17/09/20204 min read
Tìm hiểu về typedef và enum trong C++.

Môi trường thực thi

Codes dùng để ví dụ cho bài viết này được viết và thực thi tốt trong môi trường Visual Studio 2013 Ultimate.

Từ khóa typedef

Vấn đề

Trong một vài trường hợp cần tạo thêm tên cho một kiểu dữ liệu. Vì một vài lý do như kiểu dữ liệu có tên quá dài và cần tạo thêm một cái tên ngắn gọn hơn, hoặc tên của kiểu dữ liệu hiện tại tối nghĩa so với ý nghĩa mong muốn.

Chức năng

Từ khóa typedef giúp tạo thêm một tên (định danh) cho kiểu dữ liệu. Ngoài ra, từ khóa typedef còn dùng để định nghĩa tên cho một hàm. Tuy nhiên, trong phạm vi bài viết này chỉ tập trung vào việc sử dụng typedef cho kiểu dữ liệu.

Cú pháp khai báo

typedef <tên kiểu> <tên mới>;

Các ví dụ

typedef short smallNumber;

int main()
{
	smallNumber var_s = 10;

	var_s = var_s + 10;
	var_s++;

	return 0;
}
  • typedef là từ khóa.
  • short là tên của kiểu dữ liệu.
  • smallNumber là tên mới muốn đặt cho kiểu dữ liệu.

Sau đó có thể thao tác với biến kiểu smallNumber như là kiểu short thông thường.

typedef int point2D[2];

int main()
{
	point2D position;
	position[0] 	= 0;
	position[1] 	= 1;

	return 0;
}

Thay vì sử dụng mảng tĩnh 2 phân tử để khai báo một điểm như sau: int position[2], thì có thể sử dụng typedef để làm cho tên kiểu dữ liệu dễ hiểu hơn: point2D position.

Phạm vi khai báo

  • Khai báo typedef ở trong hàm thì phạm vi sử dụng ở trong hàm đó.
  • Khai báo typedef ở ngoài hàm (trong file .cpp) thì phạm vi sử dụng trong file cpp đó.
  • Có thể tìm hiểu việc khai báo trong file header. Trong phạm vi bài viết không đi sâu về vấn đề này.

Kiểu enum

Vấn đề

Trong lập trình, đôi khi những kiểu dữ liệu không mang lại ý nghĩa phù hợp với mục đích người lập trình, hoặc tệ hơn có thể làm trở ngại quá trình lập trình. Lấy ví dụ khi lưu trữ các ngày trong tuần bằng một biến integer. Buộc phải nhớ chính xác bảy giá trị tương tứng với 7 ngày trong tuần. Điều này gây khó khăn cho việc ghi nhớ và phát triển lâu dài. Cần một kiểu dữ liệu mới mang lại ý nghĩa rõ ràng hơn.

Chức năng

Làm cho mã nguồn trở nên sáng sủa và dễ hiểu.

Cú pháp khai báo

enum <tên enum>
{
<tên hằng 1>,
<tên hằng 2>,
...
}
  • Sau từ khóa enum là tên kiểu liệt kê.
  • Bên trong là các hằng số, mỗi một hằng số được cách nhau bằng dấu ','. Riêng hằng số cuối cùng không có dấu ','.
  • Tên hằng không được có khoảng trắng.
  • Kết thúc enum phải có dấu ';'.
  • Có thể tạo giá trị cho hằng số. Nếu hằng số đầu tiên không được gán giá trị, thì giá trị mặc định là 0.

Các ví dụ

Cách khai báo một enum

enum eDayOfWeek
{
	MONDAY,
	TUESDAY,
	WEDNESDAY,
	THURSDAY,
	FRIDAY,
	SATURDAY,
	SUNDAY
};

Sử dụng enum để in ra thứ ngày trong tuần

#include <iostream>
using namespace std;

enum eDayOfWeek
{
	MONDAY,
	TUESDAY,
	WEDNESDAY,
	THURSDAY,
	FRIDAY,
	SATURDAY,
	SUNDAY
};

void PrintScreen(eDayOfWeek day)
{
	switch (day)
	{
	case eDayOfWeek::MONDAY :
		cout << "Now day is a Monday"	<< endl;
		break;
	case eDayOfWeek::TUESDAY:
		cout << "Now day is a Tuesday"	<< endl;
		break;
	case eDayOfWeek::WEDNESDAY:
		cout << "Now day is a Wednesday"<< endl;
		break;
	case eDayOfWeek::THURSDAY:
		cout << "Now day is a Thursday" << endl;
		break;
	case eDayOfWeek::FRIDAY:
		cout << "Now day is a Friday"	<< endl;
		break;
	case eDayOfWeek::SATURDAY:
		cout << "Now day is a Saturday"	<< endl;
		break;
	case eDayOfWeek::SUNDAY:
		cout << "Now day is a Sunday"	<< endl;
		break;
	default:
		break;
	}
}

int main()
{
	eDayOfWeek nowDay = eDayOfWeek::MONDAY;

	PrintScreen(nowDay);

	return 0;
}

Thay vì sử dụng biến integer để lưu trữ giá trị, việc sử dụng một enum giúp dễ dàng hiểu ý nghĩa của đoạn mã hơn. Thuận lợi cho quá trình phát triển.

Phạm vi khai báo

  • Khai báo kiểu liệt kê bên trong hàm thì có thể sử dụng kiểu liệt kê đó bên trong hàm.
  • Khai báo kiểu liệt kê bên trong một file cpp và ngoài hàm, thì kiểu liệt kê đó có thể được sử dụng trong toàn file cpp.
  • Có thể tìm hiểu việc khai báo trong file header. Trong phạm vi bài viết xin không đi sâu về vấn đề này.
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024