Current date May 18, 2026
Tự học C++

Tự học C++ – Module 8: Các trụ cột của OOP

URL copied
Share URL copied
Tự học C++ - Module 8: Các trụ cột của OOP
Tự học C++ – Module 8: Các trụ cột của OOP

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à GetterSetter.

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!

Share URL copied

Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

Active0
AI3
AI & Automation10

Exclusives

Lifestyle

Related Articles

Tự học C++ – Module 10: Dự án tổng kết và Con đường phía trước

Tổng kết series tự học C++ bằng một dự án quản lý...

Tự học C++ – Module 9: Xử lý Tệp và Ngoại lệ

Học cách lưu trữ dữ liệu bền vững bằng File I/O (fstream)...

Tự học C++ – Module 7: Lập trình hướng đối tượng (OOP) cơ bản

Bước vào thế giới OOP với Classes và Objects. Học cách đóng...

Tự học C++ – Module 6: Hàm (Functions) chuyên sâu

Khám phá sức mạnh của việc chia nhỏ mã nguồn bằng Hàm:...