Hướng Dẫn Đối Với Người Mới Bắt Đầu: Lớp Và Đối Tượng trong C++

Xin chào các bạn, các maestro C++ tương lai! Tôi rất vui được làm hướng dẫn cho các bạn trong hành trình thú vị vào thế giới lớp và đối tượng trong C++. Như một người đã dạy lập trình trong nhiều năm, tôi có thể nói rằng chủ đề này như học xây dựng với các gói LEGO - một khi bạn nắm vững, bạn sẽ tạo ra những điều kỳ diệu trong không thời gian!

C++ Classes & Objects

Lớp Và Đối Tượng Là Gì?

Trước khi chúng ta nhảy vào chi tiết, hãy bắt đầu với một so sánh đơn giản. Tưởng tượng bạn đang mô tả một chiếc ô tô. Một chiếc ô tô có một số đặc điểm cụ thể (màu sắc, mô hình, năm) và có thể thực hiện một số hành động cụ thể (khởi động, dừng, tăng tốc). Trong C++, một lớp giống như bản kế hoạch cho một chiếc ô tô, xác định các tính chất và hành động mà tất cả các chiếc ô tô nên có. Một đối tượng thì là một chiếc ô tô cụ thể được xây dựng từ bản kế hoạch đó.

Bây giờ, hãy bắt tay vào một số mã!

Định Nghĩa Lớp Trong C++

Trong C++, chúng ta định nghĩa một lớp bằng cách sử dụng từ khóa class. Dưới đây là cấu trúc cơ bản:

class Car {
// Các thành viên của lớp ở đây
};

Nhưng đó chỉ là một hangár trống! Hãy thêm một số chi tiết:

class Car {
public:
string color;
string model;
int year;

void start() {
cout << "Ô tô đang khởi động!" << endl;
}

void stop() {
cout << "Ô tô đang dừng!" << endl;
}
};

Hãy phân tích:

  1. Chúng ta đã định nghĩa một lớp có tên Car.
  2. Trong lớp, chúng ta có các thành viên dữ liệu (color, model, year) và các hàm thành viên (start(), stop()).
  3. Từ khóa public có nghĩa là các thành viên này có thể được truy cập từ bên ngoài lớp.

Định Nghĩa Đối Tượng Trong C++

Bây giờ đã có bản kế hoạch ô tô, hãy tạo một số chiếc ô tô thực tế! Đây là nơi đối tượng xuất hiện:

int main() {
Car myCar;  // Tạo một đối tượng của lớp Car
Car yourCar;  // Một đối tượng khác của lớp Car

return 0;
}

Xin chúc mừng! Bạn vừa "sản xuất" hai chiếc ô tô. Nhưng chúng còn rất đơn giản ngay bây giờ - hãy để chúng có tính cá nhân hơn!

Truy Cập Các Thành Viên Dữ Liệu

Để đặt hoặc lấy các giá trị của các thuộc tính của ô tô, chúng ta sử dụng toán tử chấm (.):

int main() {
Car myCar;

// Đặt giá trị
myCar.color = "Đỏ";
myCar.model = "Sportster";
myCar.year = 2023;

// Lấy giá trị
cout << "Ô tô của tôi là một " << myCar.color << " " << myCar.model << " từ năm " << myCar.year << endl;

// Gọi các hàm thành viên
myCar.start();
myCar.stop();

return 0;
}

Đầu ra:

Ô tô của tôi là một Đỏ Sportster từ năm 2023
Ô tô đang khởi động!
Ô tô đang dừng!

Thấy chưa? Chúng ta đang tương tác với đối tượng myCar của mình? Chúng ta đặt màu sắc, mô hình và năm của nó, sau đó in ra các giá trị đó, và cuối cùng gọi các hàm thành viên của nó.

Lớp Và Đối Tượng Trong Chi Tiết

Bây giờ đã nắm vững các khái niệm cơ bản, hãy nhảy vào sâu hơn. Trong C++, các lớp thường có hai phần chính:

  1. Các thành viên private: Chúng chỉ có thể được truy cập bên trong lớp.
  2. Các thành viên public: Chúng có thể được truy cập từ bên ngoài lớp.

Dưới đây là phiên bản cải thiện của lớp Car của chúng ta:

class Car {
private:
string color;
string model;
int year;
bool isRunning;

public:
// Constructor
Car(string c, string m, int y) {
color = c;
model = m;
year = y;
isRunning = false;
}

// Các phương thức lấy giá trị
string getColor() { return color; }
string getModel() { return model; }
int getYear() { return year; }

// Các phương thức khác
void start() {
if (!isRunning) {
isRunning = true;
cout << "Ô tô " << color << " " << model << " đang khởi động!" << endl;
} else {
cout << "Ô tô đã đang chạy!" << endl;
}
}

void stop() {
if (isRunning) {
isRunning = false;
cout << "Ô tô " << color << " " << model << " đang dừng!" << endl;
} else {
cout << "Ô tô đã đang dừng!" << endl;
}
}
};

Phiên bản này giới thiệu một số khái niệm mới:

  1. Các thành viên private: Chúng ta đã làm các thành viên dữ liệu của mình private để đảm bảo tính đóng gói tốt hơn.
  2. Constructor: Hàm đặc biệt này được gọi khi một đối tượng được tạo, khởi tạo các giá trị của nó.
  3. Các phương thức lấy giá trị: Chúng cho phép truy cập kiểm soát các thành viên dữ liệu private.
  4. Các phương thức cải thiện: Các phương thức start()stop() của chúng ta giờ kiểm tra trạng thái của ô tô trước khi hành động.

Hãy xem cách chúng ta sử dụng lớp cải thiện này:

int main() {
Car myCar("Đỏ", "Sportster", 2023);

cout << "Ô tô của tôi là một " << myCar.getColor() << " " << myCar.getModel()
<< " từ năm " << myCar.getYear() << endl;

myCar.start();
myCar.start();  // Thử khởi động lại
myCar.stop();
myCar.stop();  // Thử dừng lại

return 0;
}

Đầu ra:

Ô tô của tôi là một Đỏ Sportster từ năm 2023
Ô tô Đỏ Sportster đang khởi động!
Ô tô đã đang chạy!
Ô tô Đỏ Sportster đang dừng!
Ô tô đã đang dừng!

Có khó chịu không? Ô tô của chúng ta giờ hành động giống như một chiếc ô tô thực tế - nó không thể khởi động nếu nó đang chạy và không thể dừng nếu nó đã dừng.

Bảng Các Phương Thức

Dưới đây là bảng tóm tắt các phương thức trong lớp Car cải thiện của chúng ta:

Phương thức Mô tả
Car(string c, string m, int y) Constructor: Khởi tạo một đối tượng Car mới
string getColor() Trả về màu sắc của ô tô
string getModel() Trả về mô hình của ô tô
int getYear() Trả về năm của ô tô
void start() Khởi động ô tô nếu nó không phải đang chạy
void stop() Dừng ô tô nếu nó đang chạy

Và đã là! Bạn đã xây dựng lớp đầu tiên của mình trong C++ và tạo ra các đối tượng từ nó. Hãy nhớ, luyện tập làm nên vĩ đại, vì vậy đừng sợ thử nghiệm với các lớp và đối tượng của riêng bạn. Có lẽ hãy thử tạo một lớp Garage có thể chứa nhiều đối tượng Car?

Hãy mãi mãi mã nguồn, học hỏi mãi và quan trọng nhất là hãy vui vẻ! Trước khi bạn biết, bạn sẽ là người dạy ai khác về những kỳ quan của lớp và đối tượng trong C++. Chúc mừng mãi mãi mãi mãi mãi!

Credits: Image by storyset