<< Chapter < Page Chapter >> Page >

1: #include<iostream.h>

2: #include<string.h>

3: #include<assert.h>

4:

5: class Employee

6: {

7: public:

8: Employee(const char*, const char*); // Constructor

9: ~Employee(); // Destructor

10: char *GetFirstName() const; // Trả về first name

11: char *GetLastName() const; // Trả về last name

12: // Hàm thành viên tĩnh

13: static int GetCount(); // Trả về số đối tượng khởi tạo

14: private:

15: char *FirstName;

16: char *LastName;

17: // static data member

18: static int Count; // Số đối tượng khởi tạo

19: };

20:

21: // Khởi tạo thành viên dữ liệu tĩnh

22: int Employee::Count = 0;

23:

24://Định nghĩa hàm thành viên tỉnh mà trả về số đối tượng khởi tạo

25: int Employee::GetCount()

26: {

27: return Count;

28: }

29:

30: // Constructor cấp phát động cho first name và last name

31: Employee::Employee(const char *First, const char *Last)

32: {

33: FirstName = new char[ strlen(First) + 1 ];

34: assert(FirstName != 0); // Bảo đảm vùng nhớ được cấp phát

35: strcpy(FirstName, First);

36: LastName = new char[ strlen(Last) + 1 ];

37: assert(LastName != 0); // Bảo đảm vùng nhớ được cấp phát

38: strcpy(LastName, Last);

39: ++Count; // Tăng số đối tượng lên 1

40: cout<<"Employee constructor for "<<FirstName

41:      <<' '<<LastName<<" called."<<endl;

42: }

43:

44: // Destructor giải phóng vùng nhớ đã cấp phát

45: Employee::~Employee()

46: {

47: cout<<"~Employee() called for "<<FirstName

48:      <<' '<<LastName<<endl;

49: delete FirstName;

50: delete LastName;

51: --Count; // Giảm số đối tượng xuống 1

52: }

53:

54: // Trả về first name

55: char *Employee::GetFirstName() const

56: {

57: char *TempPtr = new char[strlen(FirstName) + 1];

58: assert(TempPtr != 0); // Bảo đảm vùng nhớ được cấp phát

59: strcpy(TempPtr, FirstName);

60: return TempPtr;

61: }

62:

63: // Trả về last name

64: char *Employee::GetLastName() const

65: {

66: char *TempPtr = new char[strlen(LastName) + 1];

67: assert(TempPtr != 0); // Bảo đảm vùng nhớ được cấp phát

68: strcpy(TempPtr, LastName);

69: return TempPtr;

70: }

71:

72: int main()

73: {

74: cout<<"Number of employees before instantiation is "

75:      <<Employee::GetCount()<<endl; // Sử dụng tên lớp

76: Employee *E1Ptr = new Employee("Susan", "Baker");

77: Employee *E2Ptr = new Employee("Robert", "Jones");

78: cout<<"Number of employees after instantiation is "

79:      <<E1Ptr->GetCount()<<endl;

80: cout<<endl<<"Employee 1: "

81:      <<E1Ptr->GetFirstName()

82:      <<" "<<E1Ptr->GetLastName()

83:      <<endl<<"Employee 2: "

84:      <<E2Ptr->GetFirstName()

85:      <<" "<<E2Ptr->GetLastName()<<endl<<endl;

86: delete E1Ptr;

87: delete E2Ptr;

88: cout<<"Number of employees after deletion is "

89:      <<Employee::GetCount()<<endl;

90: return 0;

91: }

Thành viên dữ liệu Count được khởi tạo là zero ở phạm vi file với lệnh:

int Employee::Count = 0;

Thành viên dữ liệu Count duy trì số các đối tượng của lớp Employee đã được khởi tạo. Khi đối tượng của lớp Employee tồn tại, thành viên Count có thể được tham chiếu thông qua bất kỳ hàm thành viên nào của một đối tượng Employee – trong ví dụ này, Count được tham chiếu bởi cả constructor lẫn destructor. Khi các đối tượng của lớp Employee không tồn tại, thành viên Count có thể vẫn được tham chiếu nhưng chỉ thông qua một lời gọi hàm thành viên tĩnh public GetCount() như sau:

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