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"); }
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.





