JavaScript is required

Anh (Chị) hãy cho biết, chương trình sau sai ở dòng nào?

1. class CRect {

2 .int *height, *width;

3. public :

4. CRect (int,int);

5. ~CRect ();

6. int DT (void) { return (height * width); }

7. }

8. CRect::CRect (int a, int b) {

9. height = new int;

10. width = new int;

11. *height = a;

12. *width = b;

13.}

14. CRect::~CRect() {

15. delete height;

16. delete width;

17. }

18. int main() {

19. CRect cn1 (3,4);

20. cout << cn1.DT();

21. return 0;

22. }

A.

6, 7

B.

9, 10

C.

6, 11, 12

D.

Không sai dòng nào.

Trả lời:

Đáp án đúng: A


Đoạn chương trình trên có lỗi ở dòng số 6. Dòng 6: `int DT (void) { return (height * width); }` **Giải thích:** * `height` và `width` là các con trỏ (`int *`). Để lấy giá trị mà chúng trỏ tới, cần phải sử dụng toán tử `*`. * Phép nhân `height * width` thực hiện phép nhân trên địa chỉ bộ nhớ mà `height` và `width` đang lưu giữ, thay vì nhân giá trị số nguyên mà chúng trỏ tới. Điều này dẫn đến kết quả sai lệch hoặc không xác định. * Để tính diện tích đúng, cần phải truy cập giá trị mà `height` và `width` trỏ tới bằng cách sử dụng `*height * *width`. **Sửa lại:** Sửa dòng 6 thành: `int DT (void) { return (*height * *width); }` Vậy đáp án đúng là A.

Câu hỏi liên quan