Đốitượnghằng,phươngthứchằng + Cũng giống như các phần tử dữ liệu khác, một đốitượng có thể được khai báo là hằng bằng cách dùng từ khoá const. Ví dụ: class DIEM { private: int x, y; int m; public: DIEM() { x = y = m = 0; } DIEM(int x1, int y1, int m1=15) { x= x1; y= y1; m= m1; } . } ; const DIEM d = DIEM(200,100); // Khai báo đốitượnghằng + Khi khai báo cần sử dụng các hàm tạo để khởi gán giá trị cho đốitượng hằng. Giá trị khởi tạo có thể là các hằng, các biến, các biểu thức và các hàm, ví dụ: int x0=100, y0=50; m0 =4; const DIEM d5 = DIEM(x0 + getmaxx()/2, y0 + getmaxy()/2, m0); + Các phươngthức có thể sử dụng cho các đốitượnghằng là hàm tạo và hàm huỷ. Về lý thuyết các đốitượnghằng không thể bị thay đổi, mà chỉ được tạo ra hoặc huỷ bỏ đi. Khi dùng một phươngthức cho đốitượnghằng, thỡ CTBD (Chương trỡnh biờn dich) sẽ cảnh bỏo (warning): Non-const function called for const object Tuy nhiên, chương trỡnh EXE vẫn được tạo và khi thực hiện chương trỡnh, thỡ nội dung cỏc đốitượnghằng vẫn bị thay đổi. Chương trỡnh dưới đây sẽ minh hoạ điều này. Chương trỡnh đưa vào lớp PS (phân số). Phươngthức toán tử ++ vẫn có thể làm thay đổiđốitượnghằng (mặc dù khi biên dịch có 3 cảnh báo). //CT4_19.CPP // doituong const // Lop PS (phan so) #include <conio.h> #include <iostream.h> #include <string.h> 224 #include <math.h> class PS { private: int t,m; public: PS() { t = m = 0; } PS(int t1, int m1) { t = t1; m = m1; } PS operator++() { t += m ; return *this ; } void in() { cout << "\nPS= " << t << "/" << m; } void nhap() { cout << "\n Nhap tu va mau: " ; cin >> t >> m; } } ; void main() { int t1=-3, m1=5; const PS p = PS(abs(t1)+2,m1+2); // Khai báo đốitượnghằng clrscr(); p.in(); ++p; p.in(); getch(); } 226 + Phươngthức const Để biến một phươngthức thành const ta chỉ việc viết thêm từ khoá const vào sau dũng đầu của phương thức. Chỳ ý: Nếu phươngthức được khai báo bên trong và định nghĩa bên ngoài lớp, thỡ từ khoỏ const cần được bổ sung cả trong khai báo và định nghĩa phương thức. Trong thân phươngthức const không cho phép làm thay đổi các thuộc tính của lớp. Vị vậy việc dùng phươngthức const cho các đốitượnghằng sẽ đảm bảo giữ nguyên nội dung của các đốitượng hằng. Đương nhiên các phươngthức const vẫn dùng được cho các đốitượng khác. Ví dụ sau về lớp PS (phân số) minh hoạ việc dùng phươngthức const. // Đốitượng const // Phươngthức const // Lop PS (phan so) #include <conio.h> #include <iostream.h> #include <string.h> #include <math.h> class PS { private: int t,m; public: PS() { t = m = 0; } PS(int t1, int m1) { t = t1; m = m1; } PS operator++() { t += m ; return *this ; } void in() const ; void nhap() { cout << "\n Nhap tu va mau: " ; cin >> t >> m; } } ; void PS::in() const { cout << "\nPS= " << t << "/" << m; } void main() { int t1=-3, m1=5; const PS p = PS(abs(t1)+2,m1+2); PS q; clrscr(); q.nhap(); p.in(); q.in(); getch(); } 228 . Đối tượng hằng, phương thức hằng + Cũng giống như các phần tử dữ liệu khác, một đối tượng có thể được khai báo là hằng bằng cách dùng. đối tượng hằng + Khi khai báo cần sử dụng các hàm tạo để khởi gán giá trị cho đối tượng hằng. Giá trị khởi tạo có thể là các hằng, các biến, các biểu thức