6.5.11 Kết hợp nhiều class để tạo ra class mới – composition (2)

Xem tiếp ví dụ sau →

Class Compo vẫn bao gồm 2 class B. Tuy nhiên class và đã được chỉnh sửa một chút, chúng đã được add thêm copying constructor. Các copying constructor mới được thêm vào chỉ đưa ra một thông báo cho phép chúng ta biết rằng constructor đó đã được gọi.

Chúng ta cũng phải thêm các constructor mặc định. Tại sao ? Nếu không trả lời được thì bạn nên xem lại bài 6.5.8 Hàm khởi tạo mặc định – default constructors (2)

Lớp Compo không có copying constructor. Điều này có nghĩa là trình biên dịch sẽ tạo ra một copying constructor ngầm cho lớp. Theo như chúng ta biết, constructor này sao chép các đối tượng từng bit một. Và bây giờ chúng ta sắp khám phá một tính năng thú vị khác của constructor.

Biên dịch và chạy chương trình, kết quả ra như sau:

copying A…

copying B…

A is doing something

B is doing something

Điều này có nghĩa rằng, bên cạnh hoạt động bình thường của nó (sao chép, nhân bản), thì copying constructor sẽ gọi đến tất cả các copying constructor được định nghĩa (cả tường minh và ngầm định) bên trong các class thành phần tạo nên class đó.