高级语言 C++程序设计
(第二版)
刘景、周玉龙编第八章 继承与派生
8.1 公司雇员档案的管理
分析,由于对不同的雇员,其档案保存的内容不同,所以可以定义多个类来表示公司雇员。
employee( 雇员)类:姓名、年龄、工资。
manager( 经理)类:姓名、年龄、工资、行政级别。
engineer( 工程师)类:姓名、年龄、工资、专业、学位。
director( 高级主管)类:姓名、年龄、工资、专业、学位、
职务。
结果,把 employee作为基类; manager和 engineer作为
employee的派生类; director作为 engineer的派生类。
程序:
//program 8-1.cpp
//inlcude<iostream.h>
//include<string.h>
第八章 继承与派生
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<<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<<,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<<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(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();
}
第八章 继承与派生
8.2 派生类说明及其构造和析构函数
8.2.1 派生类说明
派生类说明的格式为,
class <类名 >:<基类说明表 >
{
private:
<私有成员表 >;
protected:
<保护成员表 >;
public:
<公有成员表 >;
};
存取权限,P.256.表 8.1。
8.2.3 派生类的构造函数和析构函数( P.259~262.)
(第二版)
刘景、周玉龙编第八章 继承与派生
8.1 公司雇员档案的管理
分析,由于对不同的雇员,其档案保存的内容不同,所以可以定义多个类来表示公司雇员。
employee( 雇员)类:姓名、年龄、工资。
manager( 经理)类:姓名、年龄、工资、行政级别。
engineer( 工程师)类:姓名、年龄、工资、专业、学位。
director( 高级主管)类:姓名、年龄、工资、专业、学位、
职务。
结果,把 employee作为基类; manager和 engineer作为
employee的派生类; director作为 engineer的派生类。
程序:
//program 8-1.cpp
//inlcude<iostream.h>
//include<string.h>
第八章 继承与派生
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<<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<<,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<<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(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();
}
第八章 继承与派生
8.2 派生类说明及其构造和析构函数
8.2.1 派生类说明
派生类说明的格式为,
class <类名 >:<基类说明表 >
{
private:
<私有成员表 >;
protected:
<保护成员表 >;
public:
<公有成员表 >;
};
存取权限,P.256.表 8.1。
8.2.3 派生类的构造函数和析构函数( P.259~262.)