高级语言C++程序设计 (第二版) 刘景、周玉龙編
高级语言C++程序设计 (第二版) 刘景、周玉龙编
第八章继承与派生 ■81公司雇员档案的管理 分析:由于对不同的雇员,其档案保存的内容不同,所以可以定 义多个类来表示公司雇员 employee(雇员)类:姓名、年龄、工资。 manager(经理)类:姓名、年龄、工资、行政级别 engineer(工程师)类:姓名、年龄、工资、专业、学位。 director(高级主管)类:姓名、年龄、工资、专业、学位、 职务。 结果:把 employee作为基类; manager和 engineer作为 employee的派生类; directo作为 engineer的派生类。 程序: //program 8-1. cpp /inlcude //include
第八章 继承与派生 ◼ 8.1 公司雇员档案的管理 ➢ 分析:由于对不同的雇员,其档案保存的内容不同,所以可以定 义多个类来表示公司雇员。 ➢ employee(雇员)类:姓名、年龄、工资。 ➢ manager(经理)类:姓名、年龄、工资、行政级别。 ➢ engineer(工程师)类:姓名、年龄、工资、专业、学位。 ➢ director(高级主管)类:姓名、年龄、工资、专业、学位、 职务。 ➢ 结果:把employee作为基类;manager和engineer作为 employee的派生类;director作为engineer的派生类。 ➢ 程序: //program 8-1.cpp //inlcude //include
第八章继承与派生 class employee short agei float salary; protected: char *name public: employee( short ag float sa, char*na){/构造函数 age=agi salary =sap name=new char[strlen(na)+1] strcpy(name nai void printo const cout<≤“”<<name<≤
第八章 继承与派生 class employee { short age; float salary; protected: char *name; public: employee(short ag,float sa,char *na){ //构造函数 age=ag; salary=sa; name=new char[strlen(na)+1]; strcpy(name,na); } void print() const{ cout<<“ ”<<name<<“:”;
第八章继承与派生 cout<<age<<“:” cout<<salary<<endi vemployeeoi delete []name;y class manager: public employee int level: public: manager(short ag float sa, char *na int lev) employee ag sa, na leveller: } void printo const employee: print(://调用基类的 print(
第八章 继承与派生 cout<<age<<“:”; cout<<salary<<endl; } ~employee() { delete []name;} }; class manager:public employee{ int level; public: manager(short ag,float sa,char *na,int lev) :employee(ag,sa,na){ level=lev; } void print() const{ employee::print();//调用基类的print()
第八章继承与派生 cout<< leve:”<<leve|<<end; Si class engineer:public employee char speciality adegree;//专业和学位 public: engineer(short ag float sa, char *na, char sp, char ad) employee (ag sa, nat speciality=spi adegree=ad; } void printo const t employee: printo//调用基类的 printo
第八章 继承与派生 cout<<“ level:”<<level<<endl; } }; class engineer:public employee{ char speciality,adegree;//专业和学位 public: engineer(short ag,float sa,char *na,char sp,char ad) :employee(ag,sa,na){ speciality=sp; adegree=ad; } void print() const{ employee::print();//调用基类的print()
第八章继承与派生 cout<<“ speciality:”<< speciality<<enc cout<<“ academic degree:”<< adegree<<endl enum ptitlePs, GM,VPS,vGMy class director public engineer title post//职位 public: director (short ag float sa, char na, char sp, char ad, ptitle po:employee ag sa, na sp,adt post=poi } void printo const engineer: printo;//调用基类的 print(。 cout<<“post:”<<post<<endl}}
第八章 继承与派生 cout<<“ speciality:”<<speciality<<endl; cout<<“ academic degree:”<<adegree<<endl; } }; enum ptitle{PS,GM,VPS,VGM}; class director:public engineer{ ptitle post;//职位 public: director(short ag,float sa,char *na,char sp,char ad, ptitle po):employee(ag,sa,na,sp,ad){ post=po; } void print() const{ engineer::print();//调用基类的print() 。 cout<<“ post:”<<post<<endl;}};
第八章继承与派生 void main({//主函数 employee emp1(236105” zhang”) employee emp2(27824.75”zha0”) manager man1(3281245”i”11); manager man2(3412005”cu”7 engineer eng(26142010”meng”EM director dir(381800.2”zhou'ErM’GM) emp1 printo: emp2 printo; man1 printo; man2, employee:: printo; eng printo; dir- printo; }
第八章 继承与派生 void main(){ //主函数 employee emp1(23,610.5,”zhang”); employee emp2(27,824.75,”zhao”); manager man1(32,812.45,”li”,11); manager man2(34,1200.5,”cui”,7); engineer eng(26,1420.10,”meng” , ’E’ , ’M’); director dir(38,1800.2,”zhou” , ’E’ , ’M’,GM); emp1.print(); emp2.print(); man1.print(); man2.employee::print(); eng.print(); dir.print(); }
第八章继承与派生 82派生类说明及其构造和析构函数 821派生类说明 派生类说明的格式为: class: private: protected: ; public. 存取权限:P256表81。 823派生类的构造函数和析构函数(P259~262)
第八章 继承与派生 ◼ 8.2 派生类说明及其构造和析构函数 8.2.1 派生类说明 ➢ 派生类说明的格式为: class : { private: ; protected: ; public: ; }; ➢ 存取权限:P.256.表8.1。 8.2.3 派生类的构造函数和析构函数(P.259~262.)