17 câu hỏi 60 phút
Which of the following can be virtual?
constructors
destructors
static functions
None of the above
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.
50 câu hỏi 60 phút
45 câu hỏi 60 phút
50 câu hỏi 60 phút
22 câu hỏi 60 phút
50 câu hỏi 60 phút
50 câu hỏi 60 phút
50 câu hỏi 60 phút
50 câu hỏi 60 phút
50 câu hỏi 60 phút
50 câu hỏi 60 phút
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.
Trong các ngôn ngữ lập trình, toán tử ||
(OR logic) thường sử dụng một kỹ thuật gọi là "short-circuit evaluation" (đánh giá đoản mạch). Điều này có nghĩa là nếu vế trái của toán tử ||
đã cho kết quả là true
, thì vế phải sẽ không được đánh giá, vì kết quả cuối cùng chắc chắn là true
bất kể giá trị của vế phải là gì. Do đó, câu phát biểu này là đúng.