Cách dùng hàm tạo của lớp thành phần ñể xây dựng hàm tạo của lớp bao

Một phần của tài liệu Hàm tạo, hàm hủy và các vấn đề liên quan (Trang 33 - 35)

ðể dùng hàm tạo (của lớp thành phần) khởi gán cho ñối tượng thành phần của lớp bao, ta sử dụng mẫu:

tên_ñối_tượng(danh sách giá trị)

Các mẫu trên cần viết bên ngoài thân hàm tạo, ngay sau dòng ñầu tiên. Nói một cách cụ thể hơn, hàm tạo của lớp bao (gồm có các ñối tượng thành phần là tên_ñối_tượng_1, …, tên_ñối_tượng_n) sẽ có dạng:

tên_lớp(danh sách ñối) : tên_ñối_tượng_1( danh sách giá trị), ... , tên_ñối_tượng_n( danh sách giá trị)

{

// Các câu lệnh trong thân hàm tạo }

Chú ý: Các dấu ngoặc sau tên ñối tượng luôn luôn phải có, ngay cả khi danh sách giá trị bên trong là rỗng.

Danh sách giá trị lấy từ danh sách ñối. Dựa vào danh sách giá trị, Trình biên dịch sẽ biết cần dùng hàm tạo nào ñể khởi gán cho ñối tượng. Nếu danh sách giá trị là rỗng thì hàm tạo không ñối sẽ ñược sử dụng.

Các ñối tượng muốn khởi gán bằng hàm tạo không ñối có thể bỏ qua, không cần phải liệt kê trong hàm tạo. Nói cách khác: Các ñối tượng không ñược liệt kê trên dòng ñầu hàm tạo của lớp bao, ñều ñược khởi gán bằng hàm tạo không ñối của lớp thành phần. Ví dụ: class A { int a, b; public: A() { a=b=0; } A(int a1, int b1)

{

b = b1; } ... } ; class B { double x, y, z; public: B() { x = y = z = 0.0 ; }

B(double x1, double y1) {

x = x1; y = y1; z = 0.0 ; }

B(double x1, double y1, double z1) { x = x1; y = y1; z = z1 ; } ... } ; class C { int m, n; A u, v; B p, q, r; public:

C(int m1, int n1,int a1, int b1, double x1, double y1, double x2, double y2, double z2) : u(), v(a1,b1), q(x1,y1), r(x2,y2,z2)

{

m = m1 ; n = n1; }

Trong hàm tạo nói trên của lớp C, thì các ñối tượng thành phần ñược khởi gán như sau:

u ñược khởi gán bằng hàm tạo không ñối của lớp A v ñược khởi gán bằng hàm tạo 2 ñối của lớp A q ñược khởi gán bằng hàm tạo 2 ñối của lớp B r ñược khởi gán bằng hàm tạo 3 ñối của lớp B

p (không có mặt) ñược khởi gán bằng hàm tạo không ñối của lớp B

Một phần của tài liệu Hàm tạo, hàm hủy và các vấn đề liên quan (Trang 33 - 35)