Một mảng các đối tượng là một dãy các phần tử đối tượng được xếp cạnh
nhau trong bộ nhớ và được khai báo với cú pháp như sau:
<tên lớp đối tượng> <biến đối tượng>[kích thước];
Ví dụ: class DIEM { public: int x,y; };
Dùng lớp DIEM, ta có thể khai báo:
DIEM d [20] ; // Khai báo mảngđối tượng DIEM d2; Có thể thực hiện các câu lệnh gán : d[0].x = 100; d[0].y = 200; d[5] = d[0]; d2 = d[5]; //gán d2 bằng phần tử thứ 6 của mảng d 3.8 Con trỏ this
Mỗi hàm thành phần của lớp có một tham số ẩn, đó là con trỏ this. Con trỏ this trỏ
đến từng đối tượng cụ thể. Ta hãy xem lại hàm nhapsl() của lớp DIEM trong ví dụ ở
trên:
void nhapsl( ) {
cout << "\n Nhap hoanh do va tung do cua diem : "; cin >>x>>y;
}
Trong hàm này ta sử dụng tên các thuộc tính x,y một cách đơnđộc. Điều này dường
như mâu thuẩn với quy tắc sử dụng thuộc tính. Tuy nhiên nó được lý giảinhư sau:
C++ sử dụng một con trỏ đặc biệt trong các hàm thành phần. Các thuộc tính viết trong hàm thành phần được hiểu là thuộc một đối tượng do con trỏ this trỏ tới. Như vậy hàm nhapsl() có thể viết một cách tường minh như sau:
void nhapsl( ) {
cout << "\n Nhap hoanh do va tung do cua diem:" ; cin >>this->x>>this->y ;
}
Con trỏ this là đối thứ nhất của hàm thành phần. Khi một lời gọi hàm thành phần được phát ra bởi một đối tượng thì tham số truyền cho con trỏ this chính là địa chỉ của đối tượng đó.
Ví dụ: Xét một lời gọi tới hàm nhapsl() : DIEM d1 ;
d1.nhapsl();
Trong trường hợp này của d1 thì this =&d1. Do đó this -> x chính là d1.x và this-> y chính là d1.y
Chú ý: Ngoài tham số đặc biệt this không xuất hiện một cách tường minh, hàm thành
phần lớp có thể có các thamsốkhác được khai báo như trong các hàm thông
thường. Ví dụ: #include <iostream.h> #include <conio.h> class time { int h,m; public :
void nhap(int h1, int m1) { h= h1; m = m1;} void hienthi(void)
{ cout <<h << " gio "<<m << " phut"<<endl;} void tong(time, time);
};
void time::tong(time t1, time t2)
{ m= t1.m+ t2.m; //this->m = t1.m+ t2.m; h= m/60; //this->h = this->m/60; m= m%60; //this->m = this->m%60; h = h+t1.h+t2.h; //this->h = this->h + t1.h+t2.h; } void main() { clrscr();
time ob1, ob2,ob3; ob1.nhap(2,45); ob2.nhap(5,40); ob3.tong(ob1,ob2);
cout <<"object 1 = "; ob1.hienthi(); cout <<"object 2 = "; ob2. hienthi(); cout <<"object 3 = "; ob3. hienthi(); getch();
}
object 1 = 2 gio 45 phut object 2 = 5 gio 40 phut object 3 = 8 gio 25 phut