Virtual function là gì?

Phrase C++
Hàm ảo

Một hàm ảo (virtual function) là một hàm thành viên (member function) trong lớp cha (base class) mà chúng ta mong đợi định nghĩa lại trong các lớp con (derived class). Một hàm ảo (virtual function) được sử dụng trong lớp cha để đảm bảo rằng hàm được ghi đè. Điều này đặc biệt áp dụng cho các trường hợp con trỏ của lớp cha trỏ đến một đối tượng (object) của lớp con .Ví dụ: hãy xem xét đoạn code dưới đây:


class Base {
   public:
    void print() {
        // code
    }
};

class Derived : public Base {
   public:
    void print() {
        // code
    }
};

Sau đó, nếu chúng ta tạo một con trỏ (pointer) kiểu Base để trỏ đến một đối tượng của lớp Derived và gọi hàm print (),nó sẽ gọi hàm print() của lớp cha.

Nói cách khác, hàm thành viên của lớp Base không bị ghi đè


int main() {
    Derived derived1;
    Base* base1 = &derived1;

    // calls function of Base class
    base1->print();

    return 0;
}

Để tránh điều này, chúng ta khai báo hàm print () của lớp cha là hàm ảo bằng cách sử dụng từ khoá virtual.


class Base {
   public:
    virtual void print() {
        // code
    }
};

Các hàm ảo là một phần không thể thiếu của tính đa hình (polymorphism) trong C ++.

Learning English Everyday