C++04737 第6章 课后练习题 完整答案.doc_第1页
C++04737 第6章 课后练习题 完整答案.doc_第2页
C++04737 第6章 课后练习题 完整答案.doc_第3页
C++04737 第6章 课后练习题 完整答案.doc_第4页
C++04737 第6章 课后练习题 完整答案.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章一、填空题1.单一继承; 2.private、protected、public; 二、单项选择题 1.C; 正确使用作用域运算符“:”能否使编译器正确调用相关的成员。2.A; 派生方式有三种,公有public派生在派生类中仍然是保护的。3.C; 赋值兼容规则对单继承和多继承都适合。4.BCD;构造函数和析构函数都不能被继承。三、改错题 1.class derived:private base /错误 derived(int b):m(b) /错误 理由:第一、这里不能私有继承,否则派生类构造函数不能调用调用基类构造函数初始化,应改成:class derived:public base ;第二、m(b)不是函数,不能调用,应改成derived(int b):base(b)。2. Derived类中重载show()方法(提示:使用作用域运算符)void Show()Base1:Show();Base2:Show();四、编程题1. 设计一个基类,从基类派生圆柱,设计成员函数输出它们的面积和体积。#include using namespace std;const float PI = 3.1415f;class Base /基类Baseprotected: /保护私有数据成员float r;public:Base(float a=0) /只含有构造函数r = a;class Circle:public Base /派生类圆protected:float area;public:Circle(float a=0):Base(a) /圆的构造函数,调用基类Base初始化半径area = PI * r * r;float getArea() /求面积函数,返回float型return area;class Cylinder:public Circle /派生类圆柱体protected:float h;float area_Cy;float cubage;public:Cylinder(float a=0, float b=0):Circle(a) /圆柱体构造函数h = b;cubage = PI * r * r * h;float getArea(float r, float h) /求圆柱体面积,传半径和高两个参数area_Cy = 2*Circle:getArea() + 2*PI*r*h; /作用域运算符:表明使用Circle类里面的求面积函数return area_Cy;/圆柱体面积等于2个底面积+侧面积float getCubage() /求圆柱体体积return cubage;void main()Circle circle(5.5f); /定义一个圆的对象circle,半径为5.5Cylinder cylinder(4.5f,7.6f);/定义一个圆柱体对象cylinder,半径为4.5,高位5.6cout圆的面积: circle.getArea() endl; cout圆柱的面积: cylinder.getArea(4.5f,7.6f) endl;cout圆柱的体积: cylinder.getCubage() endl;程序输出结果:2.下面是某公司经理、兼职人员、销售经理和销售员的工资计算方法,设计设施的积累和派生类,实现这一工资管理任务。人员类别固定工资/元计时工资/(元/小时)当月销售总额提成/元公司经理8000无无兼职人员无100无销售经理5000无5销售员无无4#include using namespace std;/计算公司,采用is-a的方式,即基类和派生类方式#include using namespace std;class Wage /工资类Salaryprotected: /保护私有数据成员double Fixed_salary; /固定工资int Hours; /工作小时数double Hourly_Wage; /时薪double Total_Sales; /总销售额double Sales_Rate; /销售额提成double salary; /总工资public:Wage(double a=0, int b=0, double c=0, double d=0, double e=0)/参数依次为(固定工资,工作小时数,时薪,总销售额,销售额提成)Fixed_salary = a;Hours = b;Hourly_Wage = c;Total_Sales = d;Sales_Rate = e;double getSalary() /基类中计算总工资salary = Fixed_salary + Hours*Hourly_Wage + Total_Sales*Sales_Rate;return salary;class company_manager: public Wage /公有派生 公司经理类 /无私有数据成员,全部使用继承的数据public:company_manager(double a=0, int b=0, double c=0, double d=0, double e=0):Wage(a,b,c,d,e)double getSalary()return Wage:getSalary(); /调用基类函数,返回总工资;class parttime_staff: public Wage /兼职人员类 /无私有数据成员,全部使用继承的数据public:parttime_staff(double a=0, int b=0, double c=0, double d=0, double e=0):Wage(a,b,c,d,e)double getSalary()cout Hours;cout Hourly_Wage;return Wage:getSalary();class sales_manager: public Wage /兼职人员类 /无私有数据成员,全部使用继承的数据public:sales_manager(double a=0, int b=0, double c=0, double d=0, double e=0):Wage(a,b,c,d,e)double getSalary()cout Total_Sales;return Wage:getSalary();class salesman: public Wage /兼职人员类 /无私有数据成员,全部使用继承的数据public:salesman(double a=0, int b=0, double c=0, double d=0, double e=0):Wage(a,b,c,d,e)double getSalary()cout Total_Sales;return Wage:getSalary();void main()/参数依次为(固定工资,工作小时数,时薪,总销售额,销售额提成)company_manager com_man(8000,0,0,0,0);parttime_staff par_sta(0,0,0,0,0);sales_manager sal_man(5000,0,0,0,0.005);salesman salm(0,0,0,0,0.04);cout 公司经理的工资是: com_man.getSalary() endl;cout 兼职人员的工资是: par_sta.getSalary() endl;cout 销售经理的工资是: sal_man.getSalary() endl;cout 销售员的工资是: salm.getSalary() endl;程序输出结果是:3. 定义一个线段类作为矩形的基类,基类有起点和终点坐标,有输出线段两端坐标和长度,以及线段和x轴的夹角的成员函数。矩形类用线段对象的两个坐标作为自己一条边的位置,它具有另外一个边长,能输出矩形的4个顶点坐标。给出类的定义并用程序验证它们的功能。输出分析:1)线段要能输出两个端点坐标、线段长度、线段与x轴夹角函数;2)矩形需要输出四个顶点坐标。#include #include using namespace std;class Point/点类,为线段类提供起点和终点坐标protected:double x, y;public :Point(double a=0, double b=0)x = a; y = b;double getX()return x;double getY()return y;class Line /线段类protected:Point p1, p2; /Point类对象做线段类的成员double length, angle;public:/两个构造函数,两种初始化方法Line(double a, double b, double c, double d):p1(a, b), p2(c, d)/用两对坐标初始化线段init();Line(Point a, Point b) /用两个点的对象初始化线段p1 = a; p2 = b;init();void init() /计算线段长度,以及和x轴的夹角的度数double x1 = p1.getX(), y1 = p1.getY();double x2 = p2.getX(), y2 = p2.getY();length = sqrt(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);angle = atan( (y2-y1) / (x2-x1) ); /正切反三角函数,得到弧度角angle = angle *180/3.141592653; /将弧度角转成角度void printXY()cout顶点坐标为: ( p1.getX() , p1.getY() ); ( p2.getX() , p2.getY() ) endl;void printLength()cout线段长度: length endl;void printAngle()cout与x轴的夹角: angle endl;class Rectangle : public Lineprotected:Line *line; /具有的另一条边public:/两个构造函数,两种初始化方法Rectangle(double a, double b, double c, double d, double e, double f, double g, double h):Line(a,b,c,d)line = new Line(e,f,g,h);Rectangle(Point a, Point b, Point c, Point d) : Line(a, b)/4个点对象,初始化line = new Line(c, d);void printPoint()coutprintXY();void main()Point p1(0, 0), p2(4, 3), p3(12, 89), p4(10, -50);Line l1(0,0,4,3);/使用两对坐标值产生一条线段l1.printXY();l1.printLength();l1.printAngle();Line l2(p3, p4);/使用两个点对象产生一条线段l2.printXY();l2.printLength();l2.printAngle();Rectangle r1(12,45,89,10,10,23,56,1); /使用四个顶点坐标值产生矩形r1.printPoint();Rectangle r2(p1, p2, p3, p4); /使用四个点对象产生矩形r2.printPoint();程序输出结果:(注意坐标值在坐标系上需要能够构成矩形,以下坐标不一定正确,仅做范例使用)4.基类是使用极坐标的点类,从它派生一个圆类,圆类用点类的坐标作圆心,圆周通过极坐标原点,圆类有输出圆心坐标、圆半径和面积的成员函数。完成类的设计并验证之。#include #include using namespace std;const double PI = 3.14159; class Point/使用极坐标的点类protected:double r, angle; /极坐标系的距离r和角度anglepublic:Point(double a=0, double b=0) /带默认参数的构造函数r = a;angle = b*PI/180; /将角度转成弧度计算void display()angle = angle*180/PI; /把弧度转成角度输出cout 极坐标为: ( r , angle ) endl;class Circle:public Pointprivate:double x, y; /直角坐标系的横坐标和纵坐标double area; /圆的面积public:Circle(double a, double b):Point(a, b)x = r*cos(angle); /极坐标转换成直角坐标y = r*sin(angle);area = PI*r*r;void printXY() /输出圆心的直角坐标cout 圆心的直角坐标是: ( x , y ) endl;void printR() /输出圆的半径cout 圆的半径是: r endl;void printArea()cout 圆的面积是: area endl;void main()Point p1(5.5, 45);Circle c1(5.5, 45);p1.display();c1.display();c1.printXY();c1.printR();c1.printArea();程序输出结果:5.设计一个线段基类,当创建无参数对象时,才要求用户输入长度。同样,其派生的直角三角形类也是在产生对象时要求输入两个直角边的长度。直角三角形在派生矩形类,矩形类的参数也由键盘输入。设计这些类并测试他们的功能。#include #include using namespace std;class Line /线段基类protected:double lengthA;public :Line() /无参构造函数,提示输入线段长度cout lengthA;Line(double a) /带参数构造函数,给长度lengthA = a;double getLength()return lengthA;void printLength()cout 线段的长度为: lengthA endl;class Triangle : public Line/三角形类 protected: double lengthB, lengthC;publi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论