问题 填空题

[说明]
下面程序定义了一个类Shape及其成员函数,然后从类Shape派生出类Point、 类Circle、类Cylinder,以及它们的成员函数。
[C++程序]
#include "iostream.h"
class Shape
public:
virtual void printShapeName() const=0; //纯虚函数
virtual float area() const return 0.0;
virtual float volumn() const return 0.0;
;
class Point: public Shape
public:
Point (float a=0, float b=0)
(x=a; y=b; )
void setPoint(float a,float b)
(x=a; y=b;)
float getX() constreturn x;
float getY() constreturn y;
virtual void printShapeName()const
(1) ;
private:
float x,y;
;
class Circle: (2)
public:
Circle(float r=0.0, float a=0.0, float b=0 .0)
:Point (a,b)
radius=r>0 r:0;
void setRadius(float r)
radius=r>0 r:0;
float getRadius () const
return radius;
virtual float area () const
return 3 .14 259*radius*radius ;
virtual void printShapeName () const
cout<<"circle:";
private :
float radius;
;
class Cylinder: (3)
public :
Cylinder(float h=0.0,float r=0.0,float x=0.0,float y=0.0)
: (4)
height=h>0 h:0;
void setHeight (float h)
height=h>0 h:0;
virtual float area () const
return (5) ;
virtual float volumn () const

float r=Circle:: getRadius ();
return 3.14159*r*r*height;

virtual void printShapeName () const
(cout<<"cylinder: " ;
private :
float height;

答案

参考答案:2*Circle::area()+2*3.14159*Circle::getRadius()*height

解析: 本题以C++语言为载体,考查面向对象的对象设计中的几个重要概念,继承和抽象类。
本程序的功能是通过一个公共接口printShapeName()来打印不同的图形的名称。试题中共定义了4个类,Shape、Point、Circle和Cylinder(圆柱),在完成本试题时,一个重要的环节是确定这4个类之间的继承关系。
首先,确定基类。题目的说明已经指出,类Shape是一个抽象类,那么Shape只能作为基类。
其次,由Shape派生出了Point,空(1)要求给出printShapeName()的实现体:打印图形的名称,即cout<<"Point:"。空(2)考查基类及继承方式,由于在Circle的构造函数中使用了Point的构造函数,所以Point作为基类,又因为无法确定Circle是否会作为其他类的基类(若存在这种情况,该类中的某些成员函数可能会是其他类的公共接口),因此选择public方式,则空(2)应填入public Point,同样的情况,空(3)应填入public Circle,空(4)应填入对基类构造函数的调用Circle(r,x,y)。空(5)考查对基类成员函数的调用2*Circle::area()+2*3.14159*Circle::getRadius()*height。

单项选择题
判断题