JavaScript is required

In the following program, how many times Base’s constructor will be called? #include using namespace std; class Base { int static i; public: Base() { cout << "Base's constructor"; }; }; class Sub1 : public virtual Base {}; class Sub2 : public Base {}; class Multi : public Sub1, public Sub2 {}; void main() { Multi m; system("pause"); }

A.

1

B.

2

C.

3

D.

error

Trả lời:

Đáp án đúng: B


Trong đoạn chương trình C++ này, chúng ta cần xác định số lần mà constructor của lớp `Base` được gọi. - Lớp `Sub1` kế thừa `Base` theo kiểu `virtual`. Điều này có nghĩa là nếu có nhiều lớp kế thừa `Base` thông qua `Sub1`, chỉ có một bản sao của `Base` được tạo ra. - Lớp `Sub2` kế thừa `Base` theo kiểu thông thường (không `virtual`). Do đó, một bản sao mới của `Base` sẽ được tạo ra khi `Sub2` được khởi tạo. - Lớp `Multi` kế thừa cả `Sub1` và `Sub2`. Khi một đối tượng `Multi` được tạo ra, constructor của `Base` sẽ được gọi một lần thông qua kế thừa `virtual` từ `Sub1`, và một lần nữa thông qua kế thừa thông thường từ `Sub2`. Vì vậy, constructor của `Base` sẽ được gọi tổng cộng 2 lần.

Câu hỏi liên quan