Đố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 từ khoá const. Ví dụ: Class diem { Private: Int x, y; int m; Public: Diem() { X = y = m = 0; } Diem(int x1, ...
+ 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 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 đố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 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ương thức có thể sử dụng cho các đối tượng hằng là hàm tạo và hàm huỷ. Về lý thuyết các đối tượng hằng không thể bị thay đổi, mà chỉ được tạo ra hoặc huỷ bỏ đi.
Khi dùng một phương thức cho đối tượng hằ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 đối tượng hằ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ương thức toán tử ++ vẫn có thể làm thay đổi đối tượng hằng (mặc dù khi biên dịch có 3 cảnh báo).
//ct4_19.cpp // doi tuong 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() { Cout << " ps= " << t << "/" << m; } Void nhap() { cout << " 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 đối tượng hằng Clrscr(); P.in(); ++p; P.in(); Getch(); }
+ Phương thức const
Để biến một phương thứ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.
Nếu phương thứ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ương thứ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ương thức const cho các đối tượng hằng sẽ đảm bảo giữ nguyên nội dung của các đối tượng hằng.
Đương nhiên các phương thức const vẫn dùng được cho các đối tượng khác.
Ví dụ sau về lớp ps (phân số) minh hoạ việc dùng phương thức const.
// đối tượng const // phương thứ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 << " nhap tu va mau: " ; Cin >> t >> m; } } ; Void ps::in() const { Cout << " ps= " << 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(); }