Mảngđốitượng 10.1. Khai báo Có thể dùng tên lớp để khai báo mảngđốitượ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ỡ] ; Ví dụ giả sử đó định nghĩa lớp DIEM (Điểm), khi đó có thể khai báo các mảngđốitượ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. 10.2. Khai báo và khởi gán Để 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ố) } ; Ví dụ 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)}; 214 ý 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ử. 10.3. Biểu thị thành phần của phần tử mảng Để 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í dụ để 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] 10.4. Ví dụ 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 // mangdoituong // 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; } 216 ~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 << "\nHo ten: " << ht << " Tong diem: " << td; } void TS::nhap(int i) { cout << "\nNhap thi sinh " << i ; cout << "\nHo ten: " ; cin >> ht; cout << "Tong diem: " ; cin >> td; } void main() { TS ts[100]; int n, i, j; clrscr(); cout << "\n So thi sinh: " ; cin >> n; for (i=1; i<= n; ++i) ts[i].nhap(i); cout <<"\n 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 <<"\n\n Danh sach sau khi sap xep:"; for (i=1; i<= n; ++i) ts[i].in(); getch(); } 218 . Mảng đối tượng 10.1. Khai báo 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ỡ]. tử mảng Để 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