////////////////////////////////////////////////////////////// //--------------------declaration of class CEmployee -------- #ifndef _CEMPLOYEE_H_ #define _CEMPLOYEE_H_ class CEmployee { private: char *m_pName; //name int m_nAge; //age float m_fSalary; // salary char *m_pDepartment; //deparment public: //-----------constructor's declaration--------------------- CEmployee(char *pName = "", char *pDepartment = "", int age = 0, float salary = 0.0); CEmployee(const CEmployee &src); //-----------destructor's declaration---------------------- ~CEmployee(); //-----------others's member functions's declaration------- void SetName(char *name); //set the employee's name char *GetName() const; //retrieve the employee's name void SetAge(int age); //set the employee's age int GetAge() const; //retrieve the employee's age void SetSalary(float salary);//set the employee's salary float GetSalary() const; //retrieve the employee's salary void SetDepartment(char *department); //set the employee's department char *GetDepartment() const; //retrieve the employee's department void Print() const; //output the information }; #endif ///////////////////////////////////////////////////////////// //------------Declaration of class CManager------------------ #include "CEmployee.h" ///////////////////////////////////////////////////////////// #ifndef _CMANAGER_H_ #define _CMANAGER_H_ class CManager : public CEmployee { //-------------private members' declaration------------- private: int m_nLevel; //rank //-------------public member functions' declaration------ public: //-------------default constructor ----------------------- CManager(char *name = "", char *department = "", int age = 0, float salary = 0.0, int level = 0); //-------------copy constructor--------------------------- CManager(const CManager &m); //-------------destructor declaration---------------------- ~CManager(); //-------------other member functions ------------------------ void SetLevel(int level); //set the level int GetLevel() const; //get the level void Print() const; //output the information }; #endif //////////////////////////////////////////////////////////////// #include <iostream> #include <cstring> using namespace std; #include "CEmployee.h" #include "CManager.h" //------------------------------------------------------------------------------- CManager::CManager(char *name, char *department, int age, float salary, int level) : CEmployee(name, department, age, salary) { cout << "Called CManager constructor "<< endl; m_nLevel = level; } //------------------------------------------------------------------------------- CManager::CManager(const CManager &src) : CEmployee(src) { cout << "Called CManager constructor "<< endl; m_nLevel = src.m_nLevel; } //------------------------------------------------------------------------------- CManager::~CManager() { cout << "Called ~CManager destructor " << endl; //Nothing to do } //------------------------------------------------------------------------------- inline void CManager::SetLevel(int level) { m_nLevel = level; } //------------------------------------------------------------------------------- int CManager::GetLevel() const { return m_nLevel; } //------------------------------------------------------------------------------- void CManager::Print() const { CEmployee::Print(); cout << "Level : " << m_nLevel << endl; } #include <iostream> #include <cstring> using namespace std; #include "CEmployee.h" //----------------------------------------------------------------------- CEmployee::CEmployee(char *pName, char *pDepartment, int age, float salary) { int nLenOfName = strlen(pName); int nLenOfDepart = strlen(pDepartment); m_pName = new char [nLenOfName+1]; strcpy(m_pName, pName); m_pName[nLenOfName] = '\0'; m_pDepartment = new char[nLenOfDepart+1]; strcpy(m_pDepartment, pDepartment); m_pDepartment[nLenOfDepart] = '\0'; m_nAge = age; m_fSalary = salary; cout << "Called CEmployee constructor "<< endl; } //------------------------------------------------------------------------ CEmployee::CEmployee(const CEmployee &src) { if (!m_pName) delete [] m_pName; if (!m_pDepartment) delete [] m_pDepartment; int len1 = strlen(src.GetName()); int len2 = strlen(src.GetDepartment()); m_pName = new char[len1+1]; strcpy(m_pName, src.GetName()); m_pName[len1] = '\0'; m_pDepartment = new char[len2+1]; strcpy(m_pDepartment, src.GetDepartment()); m_pDepartment[len2] = '\0'; m_nAge = src.GetAge(); m_fSalary = src.GetSalary(); cout << "Called CEmployee constructor "<< endl; } //------------------------------------------------------------------------- CEmployee::~CEmployee() { if (!m_pName) delete [] m_pName; if (!m_pDepartment) delete [] m_pDepartment; cout << "Called ~CEmployee() " << endl; } //------------------------------------------------------------------------ void CEmployee::SetName(char *name) { if (!m_pName) delete [] m_pName; int len = strlen(name); m_pName = new char[len+1]; strcpy(m_pName, name); m_pName[len] = '\0'; } //-------------------------------------------------------------------------- inline char * CEmployee::GetName() const { return m_pName; } //-------------------------------------------------------------------------- inline char * CEmployee::GetDepartment() const { return m_pDepartment; } //-------------------------------------------------------------------------- void CEmployee::SetDepartment(char *pDepartment) { if (!m_pDepartment) delete [] m_pDepartment; int len = strlen(pDepartment); m_pDepartment = new char[len+1]; strcpy(m_pDepartment, pDepartment); m_pDepartment[len] = '\0'; } //-------------------------------------------------------------------------- inline void CEmployee::SetAge(int age) { m_nAge = age; } //-------------------------------------------------------------------------- inline int CEmployee::GetAge() const { return m_nAge; } //-------------------------------------------------------------------------- inline float CEmployee::GetSalary() const { return m_fSalary; } //-------------------------------------------------------------------------- inline void CEmployee::SetSalary(float salary) { m_fSalary = salary; } //-------------------------------------------------------------------------- void CEmployee::Print() const { cout << "Name : " << m_pName << endl << "Department : " << m_pDepartment << endl << "Age : " << m_nAge << endl << "Salary : " << m_fSalary << endl; } //-------------------------------------------------------------------------- #include <iostream> #include <cstdlib> using namespace std; #include "CEmployee.h" #include "CManager.h" int main() { CEmployee e1("huang", "economic", 22, 12000.0); cout << "--------------------Test the class CEmployee-------------" << endl; cout << e1.GetName() << endl; cout << e1.GetDepartment() << endl; cout << e1.GetAge() << endl; cout << e1.GetSalary() << endl; e1.Print(); cout << "sizeof(m_pName) = " << sizeof(e1.GetName()) << endl; cout << "sizeof(m_pDepartment) = " << sizeof(e1.GetDepartment()) << endl; cout << "sizeof(m_nAge) = " << sizeof(e1.GetAge()) << endl; cout << "sizeof(m_fSalary) = " << sizeof(e1.GetSalary()) << endl; cout << "sizeof(CEmployee) = " << sizeof(CEmployee) << endl; cout << "--------------------Test the class CManager-------------" << endl; CManager *pManager, manager("hecong", "economic", 22, 12000.0, 3); pManager = &manager; cout << pManager->GetName() << endl; cout << pManager->GetDepartment() << endl; cout << pManager->GetAge() << endl; cout << pManager->GetSalary() << endl; cout << pManager->GetLevel() << endl; pManager->Print(); cout << "sizeof(m_pName) = " << sizeof(manager.GetName()) << endl; cout << "sizeof(m_pDepartment) = " << sizeof(manager.GetDepartment()) << endl; cout << "sizeof(m_nAge) = " << sizeof(manager.GetAge()) << endl; cout << "sizeof(m_fSalary) = " << sizeof(manager.GetSalary()) << endl; cout << "sizeof(m_nLevel) = " << sizeof(pManager->GetLevel()) << endl; cout << "sizeof(CManager) = " << sizeof(CManager) << endl; system("pause"); return 0; }