1. Trang chủ
  2. » Công Nghệ Thông Tin

cấp phát bộ nhớ cho đối tượng

5 442 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 14,42 KB

Nội dung

cấp phát bộ nhớ cho đối tượng 11.1. Cách cấp phát bộ nhớ cho đối tượng Có thể dùng new và tên lớp để cấp phát một vùng nhớ cho một hoặc một dẫy các đối tượng. Bộ nhớ cấp phát được quản lý bởi một con trỏ kiểu đối tượng. Ví dụ sau khi đó định nghĩa lớp DIEM như trong mục trên, ta có thể thực hiện các lệnh cấp phát bộ nhớ như sau: int n = 10; DIEM *p, *q, *r ; p = new DIEM ; // Cấp phát bộ nhớ cho một đối tượng q = new DIEM[n] ; //Cấp phát bộ nhớ cho n đối tượng r = new DIEM(200,100); // Cấp phát bộ nhớ và khởi gán cho // một đối tượng 11.2. Làm việc với đối tượng thông qua con trỏ + Giả sử con trỏ p trỏ tới vùng nhớ của một đối tượng nào đó. Khi đó: - Để biểu thị một thành phần (thuộc tính hoặc phương thức) của đối tượng, ta dùng mẫu viết sau: p -> tên_thành_phần - Để biểu thị đối tượng, ta dùng mẫu viết sau: *p + Giả sử con trỏ q trỏ tới địa chỉ đầu vùng nhớ của một dẫy đối tượng. Khi đó: - Để biểu thị một thành phần (thuộc tính hoặc phương thức) của đối tượng thứ i, ta dùng một trong các mẫu viết sau: q[i].tên_thành_phần (q+i)-> tên_thành_phần - Để biểu thị đối tượng thứ i, ta dùng một trong các mẫu viết sau: q[i] *(q+i) 11.3. Bài toán sắp xếp thí sinh Trong mục 10.4. đó sử dụng mảng đối tượng để giải quyế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. Dưới đây sẽ đưa ra phương án mới bằng cách dùng con trỏ và cấp phát bộ nhớ cho các đối tượng. Chương trỡnh chỉ thay đổi hàm main() như sau: void main() { TS *ts; int n, i, j; clrscr(); cout << "\n So thi sinh: " ; cin >> n; ts = new TS[n+1]; 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(); } Nhận xét: Sự khác biệt giữa hàm main mới và hàm main trong 10.4 là rất ít. 11.4. Danh sách móc nối Chương trỡnh dưới đây định nghĩa lớp tự trỏ TS (lớp có thuộc tính kiểu *TS). Lớp này được dùng để tổ chức danh sách móc nối. Chương trỡnh nhập một danh sỏch thớ sinh và chứa trong một danh sỏch móc nối. Sau đó duyệt trên danh sách này để in các thí sinh trúng tuyển. So với lớp TS nêu trong mục 10.4, lớp TS ở đây có một số điểm khác như sau: + Thêm thuộc tính: TS *dc; // Dùng để chứa địa chỉ của một đối tượng kiểu TS + Thêm các phương thức: void setdc(TS *dc1) ; // Gán dc1 cho thuộc tính dc TS *getdc() ; // Nhận giá trị của dc + Phương thức nhap trong chương trỡnh trước có kiểu void nay sửa là: int nhap(int i); Phương thức trả về 1 nếu họ tên nhập vào khác trống, trả về 0 nếu trái lại. + Bỏ đi các phương thức không dùng đến như: Toán tử gán, hoán vị. //CT4_16.CPP // Danh sách móc nối // Lop TS (thi sinh) #include <conio.h> #include <iostream.h> #include <string.h> #include <ctype.h> 220 #include <stdio.h> class TS { private: char *ht; double td; TS *dc; public: TS() { ht = new char[20]; td = 0; dc=NULL; } ~TS() { delete ht; dc=NULL ; } int nhap(int i); void in(); double gettd() { return td; } void setdc(TS *dc1) { dc=dc1; } TS *getdc() { return dc; } } ; void TS::in() { cout << "\nHo ten: " << ht << " Tong diem: " << td; } int TS::nhap(int i) { cout << "\nNhap thi sinh " << i ; cout << "\nHo ten (Bấm Enter để kết thúc nhập): " ; 222 fflush(stdin); gets(ht); if (ht[0]==0) return 0; cout << "Tong diem: " ; cin >> td; dc=NULL; return 1; } void main() { int i=0; TS *pdau,*p,*q; pdau=NULL; clrscr(); while(1) { q=new TS; ++i; if (q->nhap(i)==0) { delete q; break; } if (pdau==NULL) pdau = p = q; else { p->setdc(q) ; p = q; } } /* In */ double diemchuan; cout << "\nDiem chuan: " ; cin >> diemchuan; cout <<"\nDanh sach trung tuyen:" ; p=pdau; while (p!=NULL) { if (p->gettd()>=diemchuan) p->in(); p = p->getdc(); } getch(); } . cấp phát bộ nhớ cho đối tượng 11.1. Cách cấp phát bộ nhớ cho đối tượng Có thể dùng new và tên lớp để cấp phát một vùng nhớ cho một hoặc một dẫy các đối. lệnh cấp phát bộ nhớ như sau: int n = 10; DIEM *p, *q, *r ; p = new DIEM ; // Cấp phát bộ nhớ cho một đối tượng q = new DIEM[n] ; / /Cấp phát bộ nhớ cho n đối

Ngày đăng: 25/10/2013, 04:20

TỪ KHÓA LIÊN QUAN

w