<< Chapter < Page | Chapter >> Page > |
18: Time::Time()
19: {
20: Hour = Minute = Second = 0;
21: }
22:
23: //Thiết lập một giá trị Time mới sử dụng giờ quânđội
24: //Thực hiện việc kiểm tra tính hợp lệ trên các giá trị dữ liệu
25: //Thiết lập các giá trị không hợp lệ thành zero
26: void Time::SetTime(int H, int M, int S)
27: {
28: Hour = (H>= 0&&H<24) ? H : 0;
29: Minute = (M>= 0&&M<60) ? M : 0;
30: Second = (S>= 0&&S<60) ? S : 0;
31: }
32:
33: //In thời gian dưới dạng giờ quân đội
34: void Time::PrintMilitary()
35: {
36: cout<<(Hour<10 ? "0" : "")<<Hour<<":"
37: <<(Minute<10 ? "0" : "")<<Minute<<":"
38: <<(Second<10 ? "0" : "")<<Second;
39: }
40:
41: //In thời gian dưới dạng chuẩn
42: void Time::PrintStandard()
43: {
44: cout<<((Hour == 0 || Hour == 12) ? 12 : Hour % 12)
44: <<":"<<(Minute<10 ? "0" : "")<<Minute
45: <<":"<<(Second<10 ? "0" : "")<<Second
46: <<(Hour<12 ? " AM" : " PM");
48: }
49:
50: int main()
51: {
52: Time T; //Đối tượng T của lớp Time
53:
54: cout<<"The initial military time is ";
55: T.PrintMilitary();
56: cout<<endl<<"The initial standard time is ";
57: T.PrintStandard();
58:
59: T.SetTime(13, 27, 6);
60: cout<<endl<<endl<<"Military time after SetTime is ";
61: T.PrintMilitary();
62: cout<<endl<<"Standard time after SetTime is ";
63: T.PrintStandard();
64:
65: T.SetTime(99, 99, 99); //Thử thiết lập giá trị không hợp lệ
66: cout<<endl<<endl<<"After attempting invalid settings:"
67: <<endl<<"Military time: ";
68: T.PrintMilitary();
69: cout<<endl<<"Standard time: ";
70: T.PrintStandard();
71: cout<<endl;
72: return 0;
73: }
Chúng ta chạy ví dụ 3.2 , kết quả ở hình 3.2
Hình 3.2: Kết quả của ví dụ 3.2
Trong ví dụ 3.2, chương trình thuyết minh một đối tượng của lớp Time gọi là T (dòng 52). Khi đó constructor của lớp Time tự động gọi và rõ ràng khởi tạo mỗi thành viên dữ liệu private là zero. Sau đó thời gian được in dưới dạng giờ quân đội và dạng chuẩn để xác nhận các thành viên này được khởi tạo thích hợp (dòng 54 đến 57). Kế tới thời gian được thiết lập bằng cách sử dụng hàm thành viên SetTime() (dòng 59) và thời gian lại được in ở hai dạng (dòng 60 đến 63). Cuối cùng hàm thành viên SetTime() (dòng 65) thử thiết lập các thành viên dữ liệu với các giá trị không hợp lệ, và thời gian lại được in ở hai dạng (dòng 66 đến 70).
Chúng ta nhận thấy rằng, tất cả các thành viên dữ liệu của một lớp không thể khởi tạo tại nơi mà chúng được khai báo trong thân lớp. Các thành viên dữ liệu này phải được khởi tạo bởi constructor của lớp hay chúng có thể gán giá trị bởi các hàm thiết lập.
Khi một lớp được định nghĩa và các hàm thành viên của nó được khai báo, các hàm thành viên này phải được định nghĩa. Mỗi hàm thành viên của lớp có thể được định nghĩa trực tiếp trong thân lớp (hiển nhiên bao gồm prototype hàm của lớp), hoặc hàm thành viên có thể được định nghĩa sau thân lớp. Khi một hàm thành viên được định nghĩa sau định nghĩa lớp tương ứng, tên hàm được đặt trước bởi tên lớp và toán tử định phạm vi (::). Chẳng hạn như ở ví dụ 3.2 gồm các dòng 18, 26, 34 và 42. Bởi vì các lớp khác nhau có thể có các tên thành viên giống nhau, toán tử định phạm vi "ràng buộc" tên thành viên tới tên lớp để nhận dạng các hàm thành viên của một lớp.
Notification Switch
Would you like to follow the 'Lập trình hướng đối tượng' conversation and receive update notifications?