Tải bản đầy đủ (.docx) (4 trang)

Mảng đối tượng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (50.32 KB, 4 trang )

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ỡ] ;
Ví dụ 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.
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
// 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;
}
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

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×