class Diem
{
float x,y;
public:
Diem(){x=0;y=0}; //ham tao khong doi
Diem(float x,float y);//ham tao co doi
};
class HT:public Diem
{
private:
float r;
public:
HT(){r=1;};
HT(float x1,float y1, float r1){r=r1;};
};
Đoạn chương trình trên khi khai báo 1 hình tròn (HT H1;) thì hình tròn H1 này chưa xác định được tâm vì theo tính chất kế thừa không kế thừa hàm tạo ta phải tự triệu gọi hàm tạo của lớp cơ sở ở lớp dẫn xuất. Để xác định tâm cho hình tròn H1 là 0,0 ta cần sửa là:
{
float x,y;
public:
Diem(){x=0;y=0}; //ham tao khong doi
Diem(float x,float y);//ham tao co doi
};
class HT:public Diem
{
private:
float r;
public:
HT(){r=1;};
HT(float x1,float y1, float r1){r=r1;};
};
Đoạn chương trình trên khi khai báo 1 hình tròn (HT H1;) thì hình tròn H1 này chưa xác định được tâm vì theo tính chất kế thừa không kế thừa hàm tạo ta phải tự triệu gọi hàm tạo của lớp cơ sở ở lớp dẫn xuất. Để xác định tâm cho hình tròn H1 là 0,0 ta cần sửa là:
Trả lời:
Đáp án đúng: A
Phân tích đoạn code:
- Lớp `Diem` có hai hàm tạo: một hàm tạo không đối số (khởi tạo `x` và `y` bằng 0) và một hàm tạo có đối số (khởi tạo `x` và `y` bằng các giá trị được truyền vào).
- Lớp `HT` (hình tròn) kế thừa từ lớp `Diem`. Lớp này có một thuộc tính `r` (bán kính) và hai hàm tạo: một hàm tạo không đối số (khởi tạo `r` bằng 1) và một hàm tạo có đối số (khởi tạo `r` bằng giá trị được truyền vào).
Khi khai báo `HT H1;`, hàm tạo không đối số của lớp `HT` được gọi. Tuy nhiên, hàm tạo này chỉ khởi tạo `r` bằng 1 mà không gọi hàm tạo của lớp cơ sở `Diem` để khởi tạo `x` và `y`. Do đó, `x` và `y` không được khởi tạo và có giá trị không xác định.
Để sửa lỗi này, ta cần gọi hàm tạo của lớp cơ sở `Diem` từ hàm tạo của lớp `HT`. Có hai cách để làm điều này:
1. Sử dụng cú pháp khởi tạo danh sách thành viên: `HT(): Diem(){r=1;}`. Trong trường hợp này, `Diem()` sẽ gọi hàm tạo không đối số của lớp `Diem`, khởi tạo `x` và `y` bằng 0.
2. Gọi tường minh hàm tạo của lớp cơ sở trong thân hàm tạo của lớp dẫn xuất: Cách này *không* được vì trong C++ không cho phép gọi tường minh hàm tạo của lớp cơ sở trong thân hàm tạo của lớp dẫn xuất. Thay vào đó phải sử dụng initialization list như ở trên.
Như vậy, phương án A là phương án đúng.
Phương án B sai vì gán giá trị trực tiếp cho x và y trong hàm tạo của HT là không đúng cú pháp, x và y là thuộc tính của lớp Diem, nên cần gọi hàm tạo của lớp Diem để khởi tạo.
Phương án C sai vì `Diem()` chỉ là một lời gọi hàm thông thường, không phải là khởi tạo lớp cơ sở.
Cùng ôn thi với bộ câu hỏi trắc nghiệm môn Lập trình hướng đối tượng có đáp án mà tracnghiem.net chia sẽ dưới đây, nhằm giúp các bạn sinh viên chuyên ngành chuẩn bị cho kì thi sắp tới.
50 câu hỏi 60 phút
Câu hỏi liên quan

FORM.08: Bộ 130+ Biểu Mẫu Thống Kê Trong Doanh Nghiệp

FORM.07: Bộ 125+ Biểu Mẫu Báo Cáo Trong Doanh Nghiệp

FORM.06: Bộ 320+ Biểu Mẫu Hành Chính Thông Dụng

FORM.05: Bộ 330+ Biểu Mẫu Thuế - Kê Khai Thuế Mới Nhất

FORM.04: Bộ 240+ Biểu Mẫu Chứng Từ Kế Toán Thông Dụng
