<< Chapter < Page | Chapter >> Page > |
2: #include<iostream.h>
3: class Time
4: {
5: public:
6: Time(int = 0, int = 0, int = 0); //Constructor mặc định
7: //Các hàm set
8: void SetTime(int, int, int); //Thiết lập thời gian
9: void SetHour(int); //Thiết lập Hour
10: void SetMinute(int); //Thiết lập Minute
11: void SetSecond(int); //Thiết lập Second
12: //Các hàm get
13: int GetHour() const; //Trả về Hour
14: int GetMinute() const; //Trả về Minute
15: int GetSecond() const; //Trả về Second
16: //Các hàm in
17: void PrintMilitary() const; //In t.gian theo dạng giờ quân đội
18: void PrintStandard() const; //In thời gian theo dạng giờ chuẩn
19: private:
20: int Hour; //0 - 23
21: int Minute; //0 - 59
22: int Second; //0 – 59
23: };
24:
25: //Constructor khởi động dữ liệu private
26: //Các giá trị mặc định là 0
27: Time::Time(int hr, int min, int sec)
28: {
29: SetTime(hr, min, sec);
30: }
31:
32: //Thiết lập các giá trị của Hour, Minute, và Second
33: void Time::SetTime(int h, int m, int s)
34: {
35: Hour = (h>= 0&&h<24) ? h : 0;
36: Minute = (m>= 0&&m<60) ? m : 0;
37: Second = (s>= 0&&s<60) ? s : 0;
38: }
39:
40: //Thiết lập giá trị của Hour
41: void Time::SetHour(int h)
42: {
43: Hour = (h>= 0&&h<24) ? h : 0;
44: }
45:
46: //Thiết lập giá trị của Minute
47: void Time::SetMinute(int m)
48: {
49: Minute = (m>= 0&&m<60) ? m : 0;
50: }
51:
52: //Thiết lập giá trị của Second
53: void Time::SetSecond(int s)
54: {
55: Second = (s>= 0&&s<60) ? s : 0;
56: }
57:
58: //Lấy giá trị của Hour
59: int Time::GetHour() const
60: {
61: return Hour;
62: }
63:
64: //Lấy giá trị của Minute
65: int Time::GetMinute() const
66: {
67: return Minute;
68: }
69:
70: //Lấy giá trị của Second
71: int Time::GetSecond() const
72: {
73: return Second;
74: }
75:
76: //Hiển thị thời gian dạng giờ quân đội: HH:MM:SS
77: void Time::PrintMilitary() const
78: {
79: cout<<(Hour<10 ? "0" : "")<<Hour<<":"
80: <<(Minute<10 ? "0" : "")<<Minute<<":"
81: <<(Second<10 ? "0" : "")<<Second;
82: }
83:
84: //Hiển thị thời gian dạng chuẩn: HH:MM:SS AM (hay PM)
85: void Time::PrintStandard() const
86: {
87: cout<<((Hour == 12) ? 12 : Hour % 12)<<":"
88: <<(Minute<10 ? "0" : "")<<Minute<<":"
89: <<(Second<10 ? "0" : "")<<Second
90: <<(Hour<12 ? " AM" : " PM");
91: }
92:
93: int main()
94: {
95: const Time T(19, 33, 52); //Đối tượng hằng
96: T.SetHour(12); //ERROR: non-const member function
97: T.SetMinute(20); //ERROR: non-const member function
98: T.SetSecond(39); //ERROR: non-const member function
99: return 0;
100: }
Chương trình này khai báo một đối tượng hằng của lớp Time và cố gắng sửa đổi đối tượng với các hàm thành viên không hằng SetHour(), SetMinute() và SetSecond(). Các lỗi cảnh báo được phát sinh bởi trình biên dịch (Borland C++) như hình 3.13.
Hình 3.13: Các cảnh báo của chương trình ở ví dụ 3.13
Lưu ý: Hàm thành viên const có thể được đa năng hóa với một phiên bản non-const. Việc lựa chọn hàm thành viên đa năng hóa nào để sử dụng được tạo một cách tự động bởi trình biên dịch dựa vào nơi mà đối tượng được khai báo const hay không.
Một đối tượng const không thể được thay đổi bởi phép gán vì thế nó phải được khởi động. Khi một thành viên dữ liệu của một lớp được khai báo const, một bộ khởi tạo thành viên (member initializer) phải được sử dụng để cung cấp cho constructor với giá trị ban đầu của thành viên dữ liệu đối với một đối tượng của lớp.
Notification Switch
Would you like to follow the 'Lập trình hướng đối tượng' conversation and receive update notifications?