void main() { vehicle bicycle(2,25); cout<<\ cout<<\ cout<<\ car audi(4,3500.0,5); cout<<\ cout<<\ cout<<\ truck jief(18,12500.0,2,33675.0);
cout<<\ cout<<\ cout<<\}
2.
#include
class person { protected: char name[20]; int birth_year; public: person(char *na, int year) { strcpy(name,na); birth_year=year; } int cal_age(int this_year) { return this_year-birth_year; } };
class graduate :virtual public person { protected: int grade;
char specialty[20]; public: graduate(char *na, int y, int g, char *spec):person(na,y) { grade=g; strcpy(specialty,spec); } void display(int this_year) { cout<<\ graduate age grade specialty\\n\ cout< class teacher :virtual public person { protected: char title[15]; char specialty[20]; public: teacher(char *na, int y, char *ti, char *spec):person(na,y) { strcpy(title,ti); strcpy(specialty,spec); } void display(int this_year) { cout<<\ teacher age title specialty\\n\ cout< class in_service_graduate:public teacher, public graduate { public: in_service_graduate(char *na, int y, char *ti, char *spec1, int g, char *spec2): teacher(na, y, ti, spec1), graduate(na, y, g, spec2),person(na,y) { } void display(int this_year) { cout<<\ age title work_specialty grade study_specialty\\n\cout< cout< void main() { } graduate gr(\teacher te(\ in_service_graduate sg(\gr.display(2002); cout< sg.display(2002); 5.代码测试 1. 2. 6.测试过程和运行结果分析 1、 将class car: public vehicle和class truck: public vehicle分别改为: class car: private vehicle和class truck: private vehicle 程序运行无法正常运行了,因为继承访问控制变成私有之后,基类的共有成员在派生类中就会变成私有的了,继承的函数在主函数中就不能访问了。 2、 两个基类的virtual都要添上,否则name等还是有二义性。不添virtual时不需要在初始化列表中添加person(na,y),但是只要添了一个virtual,就得加person(na,y)。??? 7.思考题解答 将vehicle中数据成员wheels和weight改为private性质,如何修改程序以达到相同的输出结果。 答:将vehicle中数据成员wheels和weight改为private性质后, double truck::efficiency() { return payload/(payload+weight); } 中的weight就无法被访问了。可以定义一个指向weight的指针来访问。最简单的方法-----把weight换成get_weight()就万事大吉了。 实验报告九 多态性与虚函数 1.实验目的 (1) 掌握虚函数定义及实现。 (2) 掌握具有多态性的面向对象程序设计的基本方法。 (3) 掌握纯虚函数与抽象类的定义、实现及应用。 2.实验设备 硬件环境:微型计算机 软件环境: