Nếu chúng ta muốn một constructor khác với default constructor được gọi trong quá trình tạo ra một đối tượng là một phần của đối tượng khác, chúng ta nên sử dụng cú pháp như sau →
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <iostream> using namespace std; class Element { int value; public: Element(int val) { value = val; cout << "Element(" << val << ") constructed!" << endl; } int Get(void) { return value; } void Put(int val) { value = val; } }; class Collection { Element el1, el2; public: Collection(void) : el2(2), el1(1) { cout << "Collection constructed!" << endl; } int Get(int elno) { return elno == 1 ? el1.Get() : el2.Get(); } int Put(int elno, int val) { if(elno == 1) el1.Put(val); else el2.Put(val); } }; int main(void) { Collection coll; return 0; } |
Chúng ta cũng có thể biểu diễn cú pháp đó dưới dạng giản lược như sau:
Class(…) : inner_field_constr1(…), inner_field_constr2(…) { … }
Điều này có nghĩa là bạn phải liệt kê tất cả các constructor của đối tượng bên trong mà bạn muốn sử dụng thay vì các constructor mặc định. Điều đó thể hiện ở dòng code này:
1 |
Collection(void) : el2(2), el1(1) { … } |
Chương trình sẽ được biên dịch thành công và output ra như sau:
1 2 3 |
Element(1) constructed! Element(2) constructed! Collection constructed! |
Lưu ý rằng các constructor bên trong đã được gọi theo trình tự phản ánh thứ tự khai báo của các đối tượng bên trong lớp Collection (el1 trước), chứ không phải theo thứ tự trong mà các constructor được liệt kê trong tiêu đề của constructor của class Collection (el2 trước).