private:
Base1b1;
Base2b2;
};
intmain()
{
Aobj(1,2,3,4);
}
【解答】
调用基类BASE1的构造函数:
3
调用基类BASE2的构造函数:
2
调用基类BASE1的构造函数:
4
调用基类BASE2构造函数:
1
调用派生类A的构造函数:
10
9.4 编程题
1.使用虚函数编写程序,求球体和圆柱体的体积及表面积。
由于球体和圆柱体都可以看做由圆继承而来,因此,可以把圆类Circle作为基类。
在Circle类中定义一个数据成员radius及两个虚函数area和volume。
由Circle类派生Sphere类和Column类。
在派生类中对虚函数area和volume重新定义,分别求球体和圆柱体的体积及表面积。
【解答】
#include
usingnamespacestd;
constdoublePI=3.14159265;
classcircle
{
public:
circle(doubler){radius=r;}
virtualdoublearea(){return0.0;}
virtualdoublevolume(){return0.0;}
protected:
doubleradius;
};
classsphere:
publiccircle
{
public:
sphere(doubler):
circle(r){}
doublearea()
{return4.0*PI*radius*radius;}
doublevolume()
{return4.0*PI*radius*radius*radius/3.0;}
};
classcolumn:
publiccircle
{
public:
column(doubler,doubleh):
circle(r){height=h;}
doublearea()
{return2.0*PI*radius*(height+radius);}
doublevolume()
{returnPI*radius*radius*height;}
private:
doubleheight;
};
intmain()
{
circle*p;
spheresobj
(2);
p=&sobj;
cout<<"球体:
"<cout<<"体积="<volume()<cout<<"表面积="<area()<columncobj(3,5);
p=&cobj;
cout<<"圆柱体:
"<cout<<"体积="<volume()<cout<<"表面积="<area()<}
2.某学校教职工的工资计算方法为:
所有教职工都有基本工资;
教师月工资为固定工资+课时补贴。
课时补贴根据职称和课时计算。
例如,每课时教授补贴50元,副补贴30元,讲师补贴20元。
管理人员月薪为基本工资+职务工资;
实验室人员月薪为基本工资+工作日补贴。
工作日补贴等于日补贴×月工作日数。
定义教职工抽象类,派生教师、管理人员和实验室类,编写程序测试这个类体系。
【解答】
#include
usingnamespacestd;
classstaff
{
public:
staff(doublebSalary)
{
basicSalary=bSalary;
}
virtualvoidinput()=0;
virtualvoidoutput()=0;
protected:
charname[30];
doublebasicSalary;
};
classteacher:
publicstaff
{
public:
teacher(intbasicsalary=3000):
staff(basicsalary){}
voidinput()
{
cout<<"姓名?
";
cin>>name;
cout<<"职称1,教授2,副教授3,讲师(输入1,2或3):
";
cin>>title;
cout<<"课时?
";
cin>>coursetime;
}
voidoutput()
{
doublesalary;
switch(title)
{
case1:
salary=basicSalary+coursetime*50;break;
case2:
salary=basicSalary+coursetime*30;break;
case3:
salary=basicSalary+coursetime*20;
}
cout<<"姓名:
"<"<}
protected:
intcoursetime;
inttitle;
};
classmanage:
publicstaff
{
public:
manage(intbasicsalary=2500):
staff(basicsalary){}
voidinput()
{
cout<<"姓名?
";
cin>>name;
cout<<"职务工资?
";
cin>>jobSalary;
}
voidoutput()
{
doublesalary;
salary=basicSalary+jobSalary;
cout<<"姓名:
"<"<}
protected:
doublejobSalary;
};
classtechnician:
publicstaff
{
public:
technician(intbasicsalary=2000):
staff(basicsalary){}
voidinput()
{
cout<<"姓名?
";
cin>>name;
cout<<"工作日?
";
cin>>workdays;
}
voidoutput()
{
doublesalary;
salary=basicSalary+workdays*20;
cout<<"姓名:
"<"<}
protected:
intworkdays;
};
intmain()
{
teachert;
t.input();
t.output();
managem;
m.input();
m.output();
technicianh;
h.input();
h.output();
}