Trong phần này chúng ta sẽ xem gì là early binding và late binding trong C++. Liên kết (binding) nghĩa là quá trình chuyển đổi định danh thành địa chỉ. Đối với mỗi biến và hàm, liên kết này được thực hiện. Đối với hàm, nó là việc khớp lời gọi với định nghĩa hàm đúng bởi trình biên dịch. Liên kết được thực hiện hoặc tại compile-time hoặc runtime.
Early Binding (Liên kết sớm)
Đây là đa hình compile-time. Ở đây nó liên kết trực tiếp địa chỉ với lời gọi hàm. Nạp chồng hàm (function overloading) là ví dụ của early binding.
Ví dụ
#include <iostream>
using namespace std;
class Base {
public:
void display() {
cout << "Trong Base class" << endl;
}
};
class Derived: public Base {
public:
void display() {
cout << "Trong Derived class" << endl;
}
};
int main(void) {
Base *base_pointer = new Derived;
base_pointer->display();
return 0;
}
Kết quả
Trong Base class
Late Binding (Liên kết muộn)
Đây là đa hình runtime. Trong loại liên kết này, trình biên dịch thêm mã xác định kiểu đối tượng tại runtime sau đó khớp lời gọi với định nghĩa hàm đúng. Điều này đạt được bằng cách sử dụng hàm ảo (virtual function).
Ví dụ
#include <iostream>
using namespace std;
class Base {
public:
virtual void display() {
cout << "Trong Base class" << endl;
}
};
class Derived: public Base {
public:
void display() {
cout << "Trong Derived class" << endl;
}
};
int main() {
Base *base_pointer = new Derived;
base_pointer->display();
return 0;
}
Kết quả
Trong Derived class