<< 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.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Lập trình hướng đối tượng. OpenStax CNX. Jul 29, 2009 Download for free at http://cnx.org/content/col10794/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Lập trình hướng đối tượng' conversation and receive update notifications?

Ask