Anh (Chị) hãy cho biết kết quả của đoạn lệnh sau là gì?
1. class CRect {
2. int height, width;
3. public :
4. void setGiatri(int a, int b) {
5. height = a;
6. width = b;
7. }
8. int DT() { return (height * width); }
9. };
10. int main() {
11. CRect a, *b, *c, d*;
12. d = new CRect[2]
13. b = new CRect;
14. c = &a
15. a.setGiatri(1,2);
16. b->setGiatri(3,4);
17. d->setGiatri(5,6);
18. d[1].setGiatri(7,8);
19. cout << c->DT() * (*b).DT() << endl;
20. delete b;
21. delete[] d;
22. return 0; 23. }
Trả lời:
Đáp án đúng: A
Đoạn code định nghĩa một lớp `CRect` với các thuộc tính `height` và `width`, cùng các phương thức `setGiatri` để gán giá trị cho các thuộc tính và `DT` để tính diện tích.
Hàm `main` thực hiện các bước sau:
1. Khai báo các biến thuộc lớp `CRect`: `a`, `*b`, `*c`, và `d` (là một mảng các đối tượng `CRect`).
2. Cấp phát bộ nhớ cho `d` (mảng 2 phần tử), `b` (một đối tượng).
3. Gán địa chỉ của `a` cho `c`.
4. Gán giá trị cho các đối tượng `CRect`:
* `a.setGiatri(1, 2)`: `a.height = 1`, `a.width = 2`
* `b->setGiatri(3, 4)`: `b->height = 3`, `b->width = 4`
* `d->setGiatri(5, 6)`: `d[0].height = 5`, `d[0].width = 6`
* `d[1].setGiatri(7, 8)`: `d[1].height = 7`, `d[1].width = 8`
5. Tính và in ra kết quả của biểu thức `c->DT() * (*b).DT()`.
* `c->DT()` tương đương với `a.DT()`, vì `c` trỏ tới `a`. `a.DT()` là `1 * 2 = 2`.
* `(*b).DT()`: Diện tích của đối tượng mà `b` trỏ tới. `b->DT()` là `3 * 4 = 12`.
* Vậy `c->DT() * (*b).DT()` là `2 * 12 = 24`.
6. Giải phóng bộ nhớ đã cấp phát cho `b` và `d`.
Vậy, kết quả in ra màn hình là 24.