C++ là một ngôn ngữ lập trình mạnh mẽ và phổ biến, đặc biệt là trong phát triển phần mềm và hệ thống nhúng. Một trong những khái niệm quan trọng nhất trong C++ là class (lớp). Class là một đặc điểm của lập trình hướng đối tượng (Object-Oriented Programming – OOP) và là cơ sở cho việc tổ chức, quản lý mã nguồn theo một cấu trúc dễ hiểu và dễ bảo trì.
1. Class là gì?
Class trong C++ là một kiểu dữ liệu tự định nghĩa, trong đó nhóm các biến và các hàm (method) có liên quan lại với nhau. Nó giống như một bản thiết kế (blueprint) để tạo ra các đối tượng (object). Một object là một thực thể cụ thể của class, và khi bạn tạo một object, bạn đang tạo một thực thể dựa trên bản thiết kế mà class cung cấp.
Ví dụ, bạn có thể có một class Car
(Xe hơi), và từ class này, bạn có thể tạo ra các object như myCar
, yourCar
, v.v. Mỗi object sẽ có các thuộc tính và hành vi được xác định bởi class Car
.
2. Cấu trúc của một Class
Một class trong C++ được định nghĩa bằng từ khóa class
, theo sau đó là tên của class và phần thân của nó được bao bọc bởi cặp ngoặc {}
. Dưới đây là ví dụ cơ bản về định nghĩa class:
class Car {
public:
// Thuộc tính (biến thành viên)
std::string brand;
std::string model;
int year;
// Hành vi (hàm thành viên)
void printDetails() {
std::cout << "Brand: " << brand << "\n";
std::cout << "Model: " << model << "\n";
std::cout << "Year: " << year << "\n";
}
};
Trong ví dụ này:
Car
là tên của class.
brand
, model
, year
là các thuộc tính (biến thành viên) của class.
printDetails()
là một hành vi (hàm thành viên) của class.
3. Truy cập thành viên trong Class
Các thành viên của class có thể được truy cập bằng các từ khóa public
, private
, và protected
:
Public: Các thành viên khai báo sau từ khóa public
có thể được truy cập từ bất kỳ đâu trong chương trình.
Private: Các thành viên khai báo sau từ khóa private
chỉ có thể được truy cập từ bên trong chính class đó.
Protected: Tương tự như private
, nhưng các thành viên này có thể được truy cập bởi các lớp dẫn xuất (lớp con).
Ví dụ:
class Car {
private:
std::string engineNumber; // Chỉ có thể truy cập từ bên trong class Car
public:
std::string brand;
std::string model;
int year;
void setEngineNumber(std::string en) {
engineNumber = en;
}
std::string getEngineNumber() {
return engineNumber;
}
};
4. Constructor và Destructor
Constructor là một hàm đặc biệt được gọi khi một object của class được tạo ra. Constructor thường được sử dụng để khởi tạo các biến thành viên của class. Constructor có tên giống với tên của class và không có kiểu trả về.
Destructor là một hàm đặc biệt được gọi khi object bị hủy (khi nó ra khỏi phạm vi hoặc được delete). Destructor được sử dụng để giải phóng tài nguyên, như bộ nhớ, khi object không còn được sử dụng.
Ví dụ về constructor và destructor:
class Car {
public:
std::string brand;
std::string model;
int year;
// Constructor
Car(std::string b, std::string m, int y) {
brand = b;
model = m;
year = y;
}
// Destructor
~Car() {
std::cout << "Car object destroyed\n";
}
void printDetails() {
std::cout << "Brand: " << brand << "\n";
std::cout << "Model: " << model << "\n";
std::cout << "Year: " << year << "\n";
}
};
5. Tính đóng gói (Encapsulation)
Encapsulation là quá trình đóng gói dữ liệu và các phương thức hoạt động trên dữ liệu đó trong cùng một class, giúp bảo vệ dữ liệu và đảm bảo rằng nó chỉ có thể được thay đổi thông qua các phương thức được cung cấp.
6. Tính kế thừa (Inheritance)
Inheritance cho phép một class (lớp con) kế thừa các thuộc tính và hành vi từ một class khác (lớp cha). Điều này giúp tái sử dụng mã và tạo ra các hệ thống phân cấp class.
Ví dụ về kế thừa:
class Vehicle {
public:
int speed;
void setSpeed(int s) {
speed = s;
}
};
class Car : public Vehicle {
public:
std::string brand;
std::string model;
void setBrandModel(std::string b, std::string m) {
brand = b;
model = m;
}
void printDetails() {
std::cout << "Brand: " << brand << "\n";
std::cout << "Model: " << model << "\n";
std::cout << "Speed: " << speed << "\n";
}
};
Trong ví dụ này, class Car
kế thừa từ class Vehicle
, và do đó nó có thể truy cập và sử dụng thuộc tính speed
của class Vehicle
.
7. Tính đa hình (Polymorphism)
Polymorphism cho phép một hành động có thể thực hiện theo nhiều cách khác nhau. Trong C++, polymorphism thường đạt được qua việc sử dụng hàm ảo (virtual functions) và tính đa hình động (dynamic polymorphism).
8. Kết luận
Class là một khái niệm cốt lõi trong lập trình C++ và là nền tảng cho lập trình hướng đối tượng. Việc hiểu rõ class và các tính chất liên quan như encapsulation, inheritance, và polymorphism sẽ giúp bạn xây dựng các chương trình phức tạp hơn, dễ bảo trì và mở rộng. Bài viết này chỉ mới đề cập đến những khái niệm cơ bản, và có rất nhiều điều thú vị khác về class trong C++ mà bạn có thể tìm hiểu thêm khi thực hành và học hỏi sâu hơn.
Kết nối với web designer Lê Thành Nam