Mảng đối tượng
Có thể dùng tên lớp để khai báo mảng đối tượng (giống như khai báo mảng int, float, char, ...) Theo mẫu: Tên_lớp tên_mảng[kích_cỡ] ; G iả sử đã định nghĩa lớp diem (điểm), khi đó có thể khai báo các mảng đối ...
Có thể dùng tên lớp để khai báo mảng đối tượng (giống như khai báo mảng int, float, char, ...) Theo mẫu:
Tên_lớp tên_mảng[kích_cỡ] ;
Giả sử đã định nghĩa lớp diem (điểm), khi đó có thể khai báo các mảng đối tượng diem như sau:
Diem a[10], b[20] ;
Ý nghĩa: a là mảng kiểu diem gồm 10 phần tử
b là mảng kiểu diem gồm 20 phần tử
Câu lệnh khai báo mảng sẽ gọi tới hàm tạo không đối để tạo các phần tử mảng. Trong ví dụ trên, hàm tạo được gọi 30 lần để tạo 30 phần tử mảng đối tượng.
Để khai báo mảng và khởi gán giá trị cho các phần tử mảng đối tượng, cần dùng các hàm tạo có đối theo mẫu sau:
Tên_lớp tên_mảng[kích_cớ] = { tên_lớp(các tham số), ...,
tên_lớp(các tham số) } ;
Giả sử lớp diem đã định nghĩa:
Class diem { Private: Int x, y ; Public: Diem() { X=y=0; } Diem(int x1, int y1) { X=x1; y=y1; } Void nhapsl(); Void ve_doan_thang(diem d2, int mau) ; };
Khi đó các câu lệnh khai báo dưới đây đều đúng:
Diem d[5] = {diem(1,1),diem(200,200)};
Diem u[] = {diem(1,1),diem(200,200)};
Ý nghĩa của các lệnh này như sau:
Câu lệnh đầu gọi tới hàm tạo 2 lần để khởi gán cho d[1], d[2] và gọi tới hàm tạo không đối 3 lần để tạo các phần tử d[3], d[4] và d[5].
Câu lệnh sau gọi tới hàm tạo 2 lần để khởi gán cho u[1], u[2]. Mảng u sẽ gồm 2 phần tử.
Để biểu thị thuộc tính của phần tử mảng đối tượng, ta viết như sau:
Tên_mảng[chỉ số] . Tên_thuộc_tính
Để thực hiện phương thức đối với phần tử mảng ta viết như sau:
Tên_mảng[chỉ số] . Tên_phương_thức(danh sách tham số) ;
Để vẽ đoạn thẳng nối điểm d[1] với d[2] theo mầu đỏ, ta có thể dùng phương thức ve_doan_thang như sau:
D[1].ve_doan_thang(d[2], 4);// thực hiện phương thức đối với d[1]
Chương trình dưới đây đưa vào lớp ts (thí sinh) và xét bài toán: nhập một danh sách thí sinh, sắp xếp danh sách theo thứ tự giảm của tổng điểm. Chương trình minh hoạ:
+ Cách dùng mảng đối tượng.
+ Vai trò con trỏ this (trong phương thức hv(hoán vị)) .
+ Các hàm tạo, hàm huỷ.
+ Vai trò của toán tử gán (nếu sử dụng phép gán mặc định chương trình sẽ cho kết quả sai).
//ct4_15.cpp // mang doi tuong // lop ts (thi sinh) // chu y vai tro cua toan tu gan #include <conio.h> #include <iostream.h> #include <string.h> Class ts { Private: Char *ht; Double td; Public: Ts() { Ht = new char[20]; Td = 0; } ~ts() { Delete ht; } Const ts &operator=(const ts &ts2) { This->td = ts2.td; Strcpy(this->ht,ts2.ht); Return ts2; } Void nhap(int i); Void in(); Double gettd() { Return td; } Void hv(ts &ts2) { Ts tg; Tg = *this ; *this = ts2 ; Ts2 = tg; } } ; Void ts::in() { Cout << " ho ten: " << ht << " tong diem: " << td; } Void ts::nhap(int i) { Cout << " nhap thi sinh " << i ; Cout << " ho ten: " ; cin >> ht; Cout << "tong diem: " ; cin >> td; } Void main() { Ts ts[100]; Int n, i, j; Clrscr(); Cout << " so thi sinh: " ; Cin >> n; For (i=1; i<= n; ++i) Ts[i].nhap(i); Cout <<" danh sach nhap vao:"; For (i=1; i<= n; ++i) Ts[i].in(); For (i=1; i<n ; ++i) For (j=i+1 ; j<=n; ++j) If (ts[i].gettd() < ts[j].gettd()) Ts[i].hv(ts[j]); Cout <<" danh sach sau khi sap xep:"; For (i=1; i<= n; ++i) Ts[i].in(); Getch(); }