Cách xây dựng toán tử gán

Một phần của tài liệu Hàm tạo, hàm hủy và các vấn đề liên quan (Trang 25 - 27)

Cũng giống như các phương thức khác, phương thức toán tử gán dùng ñối con trỏ this ñể biểu thị ñối tượng ñích và dùng một ñối tường minh ñể biểu thị ñối tượng nguồn. Vì trong thân của toán tử gán không nên làm việc với bản sao của ñối tượng nguồn, mà phải làm việc trực tiếp với ñối tượng nguồn, nên kiểu ñối tường minh nhất thiết phải là kiểu tham chiếu ñối tượng.

Phương thức toán tử gán có thể có hoặc không có giá trị trả về. Nếu không có giá trị trả về (kiểu void), thì khi viết chương trình khôngñược phép viết câu lệnh gán liên tiếp nhiều ñối tượng, như:

u = v = k = h ;

Nếu phương thức toán tử gán trả về tham chiếu của ñối tượng nguồn, thì có thể dùng toán tử gán thể thực hiện các phép gán liên tiếp nhiều ñối tượng.

Ví dụ ñối với lớp HT (trong mục trước), có thể xây dựng toán tử gán như sau: void HT::operator=(const HT &h)

{

r = h.r ; m = h.m ;

xhien = yhien = hienmh = 0; if (h.pht==NULL) pht = NULL; else { int size; size = imagesize(0,0,r+r,r+r); pht = new char[size]; memcpy(pht,h.pht,size); } }

Với toán tử gán này, chỉ cho phép gán ñối tượng nguồn cho một ñối tượng ñích.

Như vậy câu lệnh sau là sai: HT u, v, h ;

u = v = h ;

Bây giờ ta sửa lại toán gán ñể nó trả về tham chiếu ñối tượng nguồn như sau: const HT & HT::operator=(const HT &h)

{ r = h.r ; m = h.m ; xhien = yhien = 0; hienmh = 0 ; if (h.pht==NULL) pht = NULL; else { int size; size = imagesize(0,0,r+r,r+r); pht = new char[size]; memcpy(pht,h.pht,size);

} return h ; }

Với toán tử gán mới này, ta có thể viết câu lệnh ñể gán ñối tượng nguồn cho nhiều ñối tượng ñích. Như vậy các câu lệnh sau là ñược:

HT u, v, h ; u = v = h ;

Một phần của tài liệu Hàm tạo, hàm hủy và các vấn đề liên quan (Trang 25 - 27)