Table of contents
Open Table of contents
1. Tính Đóng gói (Encapsulation)
Ý nghĩa của Đóng gói là đảm bảo dữ liệu “nhạy cảm” được ẩn giấu khỏi người dùng. Để làm được điều này, bạn phải khai báo các thuộc tính của lớp là private.
Getter và Setter:
Vì thuộc tính là private, để đọc hoặc sửa đổi giá trị của chúng từ bên ngoài, chúng ta cung cấp các hàm public gọi là Getter và Setter.
class Employee {
private:
int salary; // Thuộc tính bị ẩn đi
public:
// Setter
void setSalary(int s) {
salary = s;
}
// Getter
int getSalary() {
return salary;
}
};
int main() {
Employee myObj;
myObj.setSalary(50000);
cout << myObj.getSalary(); // Kết quả: 50000
return 0;
}
Tại sao nên dùng?
- Kiểm soát tốt hơn dữ liệu (ví dụ: trong setter bạn có thể kiểm tra lương phải > 0).
- Tăng tính bảo mật cho dữ liệu.
2. Tính Kế thừa (Inheritance)
Kế thừa cho phép một lớp (lớp con) sử dụng lại các thuộc tính và phương thức từ một lớp khác (lớp cha). Điều này giúp tránh việc lặp lại mã nguồn.
Sử dụng dấu : để kế thừa.
// Lớp cha (Base Class)
class Vehicle {
public:
string brand = "Ford";
void honk() {
cout << "Tuut, tuut! \n";
}
};
// Lớp con (Derived Class) kế thừa từ cha
class Car: public Vehicle {
public:
string model = "Mustang";
};
int main() {
Car myCar;
myCar.honk(); // Sử dụng phương thức từ cha
cout << myCar.brand << " " << myCar.model; // Sử dụng thuộc tính từ cha
return 0;
}
3. Tính Đa hình (Polymorphism)
Đa hình nghĩa là “nhiều hình thái”. Nó xảy ra khi nhiều lớp có liên quan đến nhau thông qua kế thừa. Đa hình cho phép chúng ta thực hiện một hành động duy nhất theo nhiều cách khác nhau.
Ví dụ: Lớp cha Animal có phương thức makeSound(). Các lớp con như Pig và Dog đều kế thừa hàm này nhưng muốn phát ra âm thanh khác nhau.
class Animal {
public:
void animalSound() {
cout << "Động vật phát ra tiếng kêu \n";
}
};
class Pig : public Animal {
public:
void animalSound() { // Ghi đè phương thức cha
cout << "Con lợn kêu: ụt ịt \n";
}
};
class Dog : public Animal {
public:
void animalSound() { // Ghi đè phương thức cha
cout << "Con chó kêu: gâu gâu \n";
}
};
Lời kết Module 8
Hiểu rõ 3 đặc tính này, bạn đã thực sự làm chủ được tư duy hướng đối tượng. Hãy nhớ: Đóng gói để bảo vệ, Kế thừa để tái sử dụng, và Đa hình để linh hoạt.
Trong Module 9, chúng ta sẽ rời xa console một chút để học cách làm việc với Tệp (Files) và xử lý Ngoại lệ (Exceptions) để chương trình chạy mượt mà hơn.
Hẹn gặp lại các bạn!