Chào mừng bạn đến với Selfomy Hỏi Đáp, hãy Hỏi bài tập hoặc Tham gia ngay
0 phiếu
120 lượt xem
Khang1000 trong Tin học lớp 10 bởi Phó giáo sư (31.4k điểm)

1 Câu trả lời

0 phiếu
monmon70023220 bởi Cử nhân (3.0k điểm)

### Khái niệm đa hình (Polymorphism) trong C++

 

Đa hình là một tính năng trong lập trình hướng đối tượng (OOP) cho phép các đối tượng khác nhau được xử lý bằng cùng một giao diện, nhưng có thể thực hiện các hành vi khác nhau. Đa hình giúp tăng tính linh hoạt và khả năng mở rộng của chương trình.

 

### Có hai loại đa hình trong C++:

 

1. **Đa hình tĩnh (Compile-time Polymorphism):**

   - Được thực hiện thông qua **nạp chồng hàm (function overloading)** và **nạp chồng toán tử (operator overloading)**. 

   - Các hàm có cùng tên nhưng khác tham số sẽ được gọi tùy thuộc vào tham số truyền vào.

 

   **Ví dụ:**

   ```cpp

   #include

   using namespace std;

 

   class Math {

   public:

       int add(int a, int b) {

           return a + b;

       }

       double add(double a, double b) {

           return a + b;

       }

   };

 

   int main() {

       Math math;

       cout << math.add(5, 3) << endl; // Gọi hàm thêm cho int</p>

       cout << math.add(5.5, 3.2) << endl; // Gọi hàm thêm cho double</p>

       return 0;

   }

   ```

 

2. **Đa hình động (Runtime Polymorphism):**

   - Được thực hiện thông qua việc sử dụng **hàm ảo (virtual function)** và **kế thừa**.

   - Cho phép lớp con ghi đè (override) hàm của lớp cha và determinate cách thức gọi hàm vào thời điểm chạy.

 

   **Ví dụ:**

   ```cpp

   #include

   using namespace std;

 

   class Animal {

   public:

       virtual void sound() { // Hàm ảo

           cout << "Động vật phát ra âm thanh!" << endl;</p>

       }

   };

 

   class Dog : public Animal {

   public:

       void sound() override { // Ghi đè hàm

           cout << "Chó sủa: Woof!" << endl;</p>

       }

   };

 

   class Cat : public Animal {

   public:

       void sound() override { // Ghi đè hàm

           cout << "Mèo kêu: Meow!" << endl;</p>

       }

   };

 

   void makeSound(Animal* animal) {

       animal->sound(); // Gọi phương thức sound()

   }

 

   int main() {

       Dog myDog;

       Cat myCat;

 

       makeSound(&myDog); // In ra "Chó sủa: Woof!"

       makeSound(&myCat); // In ra "Mèo kêu: Meow!"

       

       return 0;

   }

   ```

 

### Giải thích mã:

- **Đa hình tĩnh:** Trong ví dụ trên, lớp `Math` có hai phương thức `add()` với tham số khác nhau, cho phép thực hiện phép cộng cho cả số nguyên và số thực.

- **Đa hình động:** Lớp `Animal` định nghĩa hàm ảo `sound()`, và các lớp con `Dog` và `Cat` ghi đè nó. Hàm `makeSound()` nhận một con trỏ đến lớp `Animal`, nhưng tại thời điểm gọi, phương thức cụ thể tương ứng với đối tượng đang được sử dụng sẽ được gọi.

 

 

Các câu hỏi liên quan

0 phiếu
1 trả lời 231 lượt xem
Thảo luận về khái niệm đa hình (polymorphism) trong C++. Phân tích sự khác biệt giữa đa hình thông qua con trỏ (pointer) và tham chiếu (reference).
đã hỏi 31 tháng 10, 2024 trong Tin học lớp 10 bởi Khang1000 Phó giáo sư (31.4k điểm)
0 phiếu
1 trả lời 62 lượt xem
0 phiếu
1 trả lời 272 lượt xem
đã hỏi 22 tháng 10, 2024 trong Tin học lớp 10 bởi Khang1000 Phó giáo sư (31.4k điểm)
0 phiếu
1 trả lời 154 lượt xem
đã hỏi 22 tháng 10, 2024 trong Tin học lớp 10 bởi Khang1000 Phó giáo sư (31.4k điểm)
0 phiếu
1 trả lời 181 lượt xem
0 phiếu
1 trả lời 120 lượt xem
0 phiếu
1 trả lời 106 lượt xem
Giải thích khái niệm bạn bè (friend) trong C++. Khi nào nên sử dụng nó và lợi ích của việc sử dụng bạn bè trong lập trình?
đã hỏi 23 tháng 10, 2024 trong Tin học lớp 10 bởi Khang1000 Phó giáo sư (31.4k điểm)
0 phiếu
1 trả lời 155 lượt xem
0 phiếu
1 trả lời 126 lượt xem
0 phiếu
1 trả lời 68 lượt xem

HOT 1 giờ qua

  1. trannhat900trannhat900

    52948 Điểm

  2. phamngoctienpy1987844phamngoctienpy1987844

    50728 Điểm

  3. vxh2k9850vxh2k9850

    35980 Điểm

  4. Nqoc_bakaNqoc_baka

    34614 Điểm

Phần thưởng hằng tháng
Hạng 1: 200.000 đồng
Hạng 2: 100.000 đồng
Hạng 3: 50.000 đồng
Hạng 4: 20.000 đồng
Phần thưởng bao gồm: mã giảm giá Shopee, Nhà Sách Phương Nam, thẻ cào cùng nhiều phần quà hấp dẫn khác sẽ dành cho những bạn tích cực nhất của tháng. Xem tại đây
Bảng xếp hạng cập nhật 30 phút một lần
...