24/05/2018, 23:37

Hàm tạo và đối tượng thành phần

Một lớp có thuộc tính là đối tượng của lớp khác gọi là lớp bao, ví dụ: Class a { Private: Int a, b; ... } ; Class b { Private: Double x, y, z; ... } ; Class c { Private: ...

Một lớp có thuộc tính là đối tượng của lớp khác gọi là lớp bao, ví dụ:

Class a
    {
    Private:
    Int a, b;
    ... 
    } ;
    Class b
    {
    Private:
    Double x, y, z;
    ... 
    } ;
    Class c
    {
    Private:
    Int m, n;
    A u;
    B p, q;
    ...
    } ;
    

Trong ví dụ trên thì:

C là lớp bao

A, b là các lớp thành phần (của c)

+ Chú ý là trong các phương thức của lớp bao không cho phép truy nhập trực tiếp đến các thuộc tính của các đối tượng của các lớp thành phần.

+ Vì vậy, khi xây dựng hàm tạo của lớp bao, phải sư dụng các hàm tạo của lớp thành phần để khởi gán cho các đối tượng thành phần của lớp bao.

Khi xây dựng hàm tạo của lớp c, cần dùng các hàm tạo của lớp a để khởi gán cho đối tượng thành phần u và dùng các hàm tạo của lớp b để khởi gán cho các đối tượng thành phần p, q.

+ Để 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 sẽ có dạng:

Tên_lớp(danh sách đối) : tên_đối_tượng( danh sách giá trị),
    ...
    Tên_đối_tượng( danh sách giá trị)
    {
    // các câu lệnh trong thân hàm tạo
    } 
    
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

0