<< 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.
Notification Switch
Would you like to follow the 'Lập trình hướng đối tượng' conversation and receive update notifications?