Skip to content

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

TuanNDA
Published date:
Edit this post

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à 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?


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ư PigDog đề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!

Previous
Tự học C++ - Module 9: Xử lý Tệp và Ngoại lệ
Next
Tự học C++ - Module 7: Lập trình hướng đối tượng (OOP) cơ bản