JavaScript is required

Which of the following can be virtual?

A.

constructors

B.

destructors

C.

static functions

D.

None of the above

Trả lời:

Đáp án đúng: B


Phân tích:

Hàm hủy (destructor) có thể là ảo (virtual). Điều này rất quan trọng trong kế thừa để đảm bảo rằng khi một đối tượng của lớp con bị xóa thông qua một con trỏ đến lớp cha, hàm hủy của cả lớp cha và lớp con đều được gọi. Nếu hàm hủy của lớp cha không phải là ảo, chỉ hàm hủy của lớp cha sẽ được gọi, dẫn đến rò rỉ bộ nhớ nếu lớp con cấp phát bộ nhớ.

Hàm tạo (constructor) không thể là ảo. Vì hàm tạo được sử dụng để tạo ra một đối tượng thuộc một lớp cụ thể, nó phải biết chính xác lớp nào cần tạo. Tính ảo (virtual) chỉ có ý nghĩa khi bạn gọi một hàm thông qua một con trỏ hoặc tham chiếu đến lớp cha, và bạn muốn hàm của lớp con được gọi nếu đối tượng thực tế là một thể hiện của lớp con.

Hàm tĩnh (static function) thuộc về lớp chứ không phải đối tượng. Vì vậy, không có khái niệm "đa hình" (polymorphism) áp dụng cho hàm tĩnh. Hàm tĩnh không thể là ảo.

Kết luận:

Đáp án đúng là B. Destructors có thể là virtual.

Câu hỏi liên quan