阅读下列说明和C++代码,填写程序中的空(1)~(6),将解答写入答题纸的对应栏内。 【说明】 以下C++代码实现一个简单绘图工具,绘制不同形状以及不同颜色的图形。部分类及其关系如图6—1所示。 【C++代码】 #include

admin2020-04-30  40

问题 阅读下列说明和C++代码,填写程序中的空(1)~(6),将解答写入答题纸的对应栏内。
【说明】
    以下C++代码实现一个简单绘图工具,绘制不同形状以及不同颜色的图形。部分类及其关系如图6—1所示。

【C++代码】
    #include
    #include
    using namespace std;
    class DrawCircle{  //绘制圆形,抽象类
    public:
    (1)  //定义参数为int radius,int x,int y
    virtual ~DrawCircle() {}
    };
    class RedCircle:public DrawCircle{  //绘制红色圆形
    public:
    void drawCircle(int radius,int x,int y){
    tout<<"Drawing Circle[red,radius:" <    cout<<  ",x:  "  <    }
    };
class GreenCircle:public DrawCircle{//绘制绿色圆形
    publiC:
    void drawCircle(int radius,int x,int y){
    cout<<"Drawing Circle[green,radius:" <    cout<<  ",  x:  "  << x <<  ",  y:  "  << y <<  "]"  <    }
};
class Shape{  //形状,抽象类
    protected:
    (2)    ;
    public:
    Shape(DrawCircle *drawCircle){
    this一>drawCircle=drawCircle;
    }
    virtual ~Shape() {}
    public:
    virtual VOid draw()=0;
};
class Circle:public Shape{  //圆形
    private:
    int x,y,radius;
    public:
    Circle(int x,int y,int radius,DrawCircle *drawCircle)    (3)    {
    thiS一>x=x;
    this一>y=y;
    thiS一>radius=radius;
    }
    public:
    void draw() {
    drawCircle一>    (4)  ;
    }
};
int main()
{
    Shape *redCircle=new Circle(100,100,10,  (5)  );//绘制红色圆形
    Shape *greencircle=new Circle(100,100,10,    (6)  );//绘制绿色圆形
    redCircle一>draw();
    greenCircle一>draw();
    return 0;
    }

选项

答案(1)virtual void drawCircle(int radius,int x,int y)=0 (2)DrawCircle *drawCircle (3):Shape(drawCircle) (4)drawCircle(radius,x,y) (5)new RedCircle() (6)new GreenCircle()

解析     本题考查C++语言程序设计的能力,涉及接口、类、对象、函数的定义和使用。要求考生根据给出的案例和代码说明,认真阅读理清程序思路,然后完成题目。题目所给代码清晰,易于理清思路。
    先考查题目说明,实现一个简单绘图工具,绘制不同形状以及不同颜色的图形示意(采用打印相应信息的方式实现)。根据题目说明进行设计,给出图6—1的类图,定义相关的接口、类及其之间的关系。其中Shape定义抽象类形状的接口(抽象方法)draw(),维护一个指向DrawCircle对象的引用drawCircle;Circle作为Shape的实现类,扩展了抽象类Shape,并具体实现draw()方法。DrawCircle定义实现绘制Circle的接口drawCircle(),RedCircle和GreenCircle实现DrawCircle接口并定义绘制不同颜色Circle的具体drawCircle()方法的实现。
    绘制圆形(DrawCircle)定义为接口,在C++中的抽象类,函数定义为纯虚函数,通过用virtual关键字修饰方法声明,并在声明中使用”=0”来指定,只有函数的声明,没有具体函数实现,直接用分号(;)结束,即:
    publiC:
    virtual void drawCircle(int radius,int x,int y)=0;
    抽象类无法直接创建对象,需要由具体实现类RedCircle和GreenCircle实现DrawCircle中的声明的纯虚函数后,才能创建对象。在C++中,采用:加父类名,即:
    class RedCircle:publiC DrawCircle{…}
    class GreenCircle:public DrawCircle{…}
    其中定义了drawCircle()方法的具体实现,具体绘制红色圆形和绿色圆形:
    publiC:
    void drawCircle(int radius,int x,int y){…}
    此方法的名称、返回类型、参数和访问控制与所实现接口中的相同。
    Shape定义为抽象类,其中定义一个向DrawCircle类型对象的引用drawCircle:
    protected:
    DrawCircle *drawCircle;
    在Shape类中定义一个带参数的构造器,构造器参数DrawCircle*drawCircle与对象的属性同名,用this关键字加以区分。其中this关键字用来引用当前对象或类实例,可以用—>取属性或行为,即:
    this一>drawCircle=drawCircle;
    其中,this—>drawCircle表示当前对象的drawCircle属性,赋值符号右侧drawCircle表示参数。
    抽象方法public:virtual void draw()=0;定义绘制图形的方法标识,具体绘制哪个图形由Shape的子类Circle实现。即Circle继承Shape,并在构造器中指定绘制圆形的参数——圆心、半径和DrawCircle实现,实现具体draw()方法,即:
    class Circle:public Shape{
    publiC:
    Circle(int x,  int  y,  int  radius,DrawCircle  *drawCircle)  :
Shape(drawCircle){…}
    public:
    void draw() {…}
    }
    其中,因为Shape中只定义了一个带参数的构造器,所以Circle的构造器中需显式调用父类Shape的构造器,并且只能出现子类参数表之后,即:Shape(drawCircle);Circle中实现父类的抽象方法draw(),具体调用drawCircle引用对象的drawCircle():方法:
    public:void draw() {
    drawCircle一>drawCircle(radius,x,y);
    }
    C++中采用指针引用机制实现引用对象的绑定和方法调用。
    绘制图形工具的主程序中,可以根据需求定制所需绘制的图形。本题中在的main()函数中,定义绘制红色圆形和绘制绿色圆形,创建具体绘制相应颜色圆形的对象并传递引用,并自动向上转型赋给Shape类型的引用,然后调用draw()方法,动态绑定相应Circle对象的draw()版本进行具体绘制。即:
    int main()  {
    Shape★redCircle=new Circle(100,100,10,new RedCircle());//绘制红色圆形
    Shape*greenCircle =new Circle(100,100,10,new GreenCircle());//绘制绿色圆形
    redCircle一>draw();
    greenCircle一>draw();
    return ();
    综上所述,空(1)需要是实现接口中方法声明与实现类相同,即填入“virtual voiddrawCircle(int radius,int x,int y)=O”;空(2)要表示维护一个指向DrawCircle的指针drawCircle,即填入“DrawCircle*drawCircle”;空(3)处需要调用父类的构造器,即填入“:Shape(drawCircle)”;空(4)为drawCircle调用其drawCircle方法绘制对应圆形,即填入“drawCircle(radius,x,y)”;空(5)处为创建绘制红色圆形对象,即填入“newRedCircle()”;空(6)处为绘制绿色圆形,即填入“new GreenCircle()”。
转载请注明原文地址:https://kaotiyun.com/show/Q2jZ777K
0

最新回复(0)