<< Chapter < Page Chapter >> Page >

28:

29: //Constructor: xác nhận giá trị tương thích của Month

30: //Gọi hàm CheckDay() để xác nhận giá trị tương thích của Day

31: Date::Date(int Mn, int Dy, int Yr)

32: {

33: if (Mn>0&&Mn<= 12)

34: Month = Mn;

35: else

36: {

37: Month = 1;

38: cout<<"Month "<<Mn<<" invalid. Set to Month 1."

39:           <<endl;

40: }

41: Year = Yr;

42: Day = CheckDay(Dy);

43: cout<<"Date object constructor for date ";

44: Print();

45: cout<<endl;

46: }

47:

48: //Hàm xác nhận giá trị Day tương thích đưa vào Month và Year

49: int Date::CheckDay(int TestDay)

50: {

51: static int DaysPerMonth[13] = {0, 31, 28, 31, 30, 31,

52: 9; 9; 9; 9; 9; 9; #   #   #   #   30, 31, 31, 30,31, 30, 31};

53:

54: if (TestDay>0&&TestDay<= DaysPerMonth[Month])

55: return TestDay;

56: if (Month == 2&&TestDay == 29&&

57: ; ; (Year % 400 == 0 || (Year % 4 == 0&&Year % 100 != 0)))

58: return TestDay;

59: cout<<"Day "<<TestDay<<"invalid. Set to Day 1."<<endl;

60: return 1;

61: }

62:

63: //In đối tượng Date dạng Month/Day/Year

64: void Date::Print() const

65: {

66: cout<<Month<<'/'<<Day<<'/'<<Year;

67: }

68:

69: Employee::Employee(char *FName, char *LName,

70:             int BMonth, int BDay, int BYear,

71:             int HMonth, int HDay, int HYear)

72: :BirthDate(BMonth, BDay, BYear), HireDate(HMonth, HDay, HYear)

73: {

74://Sao chép FName vào FirstName và phải chắc chắn rằng nó phù hợp

75: int Length = strlen(FName);

76:

77: Length = Length<25 ? Length : 24;

78: strncpy(FirstName, FName, Length);

79: FirstName[Length] = '\0';

80: //Sao chép LName vào LastName và phải chắc chắn rằng nó phù hợp

81: Length = strlen(LName);

82: Length = Length<25 ? Length : 24;

83: strncpy(LastName, LName, 24);

84: LastName[Length] = '\0';

85: cout<<"Employee object constructor: "

86:      <<FirstName<<' '<<LastName<<endl;

87: }

88:

89: void Employee::Print() const

90: {

91: cout<<LastName<<", "<<FirstName<<endl<<"Hired: ";

92: HireDate.Print();

93: cout<<" Birthday: ";

94: BirthDate.Print();

95: cout<<endl;

96: }

97:

98: int main()

99: {

100: Employee E("Bob", "Jones", 7, 24, 49, 3, 12, 88);

101:

102 cout<<endl;

103: E.Print();

104: cout<<endl<<"Test Date constructor with invalid values:"

105:      <<endl;

106: Date D(14, 35, 94); //Các giá trị Date không hợp lệ

107: return 0;

108: }

Chương trình gồm lớp Employee chứa các thành viên dữ liệu private LastName, FirstName, BirthDate và HireDate. Các thành viên BirthDate và HireDate là các đối tượng của lớp Date mà chứa các thành viên dữ liệu private Month, Day và Year. Chương trình khởi tạo một đối tượng Employee, và các khởi tạo và các hiển thị các thành viên dữ liệu của nó. Chú ý về cú pháp của phần đầu trong định nghĩa constructor của lớp Employee:

Employee::Employee(char *FName, char *LName, int BMonth, int BDay, int BYear,

int HMonth, int HDay, int HYear)

:BirthDate(BMonth, BDay, BYear), HireDate(HMonth, HDay, HYear)

Constructor lấy tám tham số (FName, LName, BMonth, BDay, BYear, HMonth, HDay, và HYear). Dấu hai chấm trong phần đầu phân tách các bộ khởi tạo từ danh sách các tham số. Các bộ khởi tạo định rõ các tham số truyền chon constructor của các đối tượng thành viên. Vì thế BMonth, BDay và BYear được truyền cho constructor của đối tượng BirthDate, và HMonth, HDay, và HYear được truyền cho constructor của đối tượng HireDate. Nhiều bộ khởi tạo được phân tách bởi dấu phẩy.

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