●试题六阅读以下说明和C++程序,将应填入(n)处的语句写在答题纸的对应栏内。【说明】以下程序的功能是计算三角形、矩形和正方形的面积并输出。程序由4个类组成:类Triangle、Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述3种图形面积的通用接口【C++程序】#include<iostream.h>#include<math.h>class Figure{public:virtual double getArea()=0

题目

●试题六

阅读以下说明和C++程序,将应填入(n)处的语句写在答题纸的对应栏内。

【说明】

以下程序的功能是计算三角形、矩形和正方形的面积并输出。

程序由4个类组成:类Triangle、Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述3种图形面积的通用接口

【C++程序】

#include<iostream.h>

#include<math.h>

class Figure{

public:

virtual double getArea()=0:∥纯虚拟函数

};

class Rectangle: (1) {

protected:

double height;

double width;

public:

Rectangle(){};

Rectangle(double height,double width){

this->height=height;

this->width=width;

}

double getArea(){

return (2) ;

}

};

class Square: (3) {

public:

Square(double width){

(4) ;

}

};

class Triangle: (5) {

double la;

double Ib;

double lc;

public:

Triangle(double la,double lb,double lc){

This->la=la;this->lb=lb;this->lc=lc;

}

double getArea(){

double s=(la+lb+±c)/2.0;

return sqrt(s*(s-1a)*(s-1b)*(s-1c));

}

};

void main(){

Figure*figures[3]={

new Triangle(2,3,3),new Rectangle(5,8),new SqUare (5) );

for (int i=0;i<3;i++){

cout<<"figures["<<i<<"]area="<<(figures[i])->getArea()<<endl;

}

}


相似考题
参考答案和解析
正确答案:

●试题六

【答案】(1)public Figure(2)height*width(3)public Rectangle

(4)this->height=this->width=width(5)public Figure

【解析】类TriangleRectangleSquare分别表示三角形、矩形和正方形,它们都需要求各自的面积,而抽象类Figure提供了一个纯虚拟函数getArea(),所以类Rectangle以类Figure为基类,公有继承,所以(1)空应填入"public Figure"。(2)空处为类Rectangle中求面积函数的返回值,所以根据长方形面积公式应填入"height*width"。

Square表示正方形,它是特殊的长方形,所以可以从代表长方形的类Rectangle公有继承它的成员,所以(3)空应填入"public Rectangle"。(4)空处为类Square的构造函数的函数体,显然是长等于宽,所以应填入"this->height=this->width=width"。

最后类Triangle同样从虚基类公有继承,所以(5)空应填入"public Figure"。

 

更多“●试题六阅读以下说明和C++程序,将应填入(n)处的语句写在答题纸的对应栏内。【说明】以下程序的功能是计算三角形、矩形和正方形的面积并输出。程序由4个类组成:类Triangle、Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述3种图形面积的通用接口【C++程序】#includeiostream.h#includemath.hclass Figure{public:virtual double getArea()=0:∥纯虚”相关问题
  • 第1题:

    ( 12 ) “ 图形 ” 类 Shape 中定义了纯虚函数 CalArea() ,“ 三角形 ” 类 Triangle 继承了类Shape ,请 将

    Triangle 类中的 CalArea 函数补充完整。

    class Shape{

    public:

    virtual int CalArea()=0;

    }

    class Triangle: public Shape{

    public:

    Triangle{int s, int h}: side(s),height(h) {}

    【 12 】 { return side*height/2 ; }

    private:

    int side;

    int height;

    };


    正确答案:

  • 第2题:

    阅读以下说明和C++代码,填入(n)处。

    [说明]

    以下C++代码使用虚函数实现了同一基类shape派生出来的Class rectangle、Class triangle、Class circle实现了计算矩形、圆形面积的计算。仔细阅读以下代码,将(n)处语句补充完整。

    [代码5-1]

    include<iostream.h>

    define PI 3.14159

    class shape {//基类

    protected:

    (1);

    public:

    (2);

    (3);

    };

    [代码5-2]

    class rectangle: public shape {

    public:

    rectangle (int x2,int y2,int r2): (4) {};

    double area ( ) {return x*y; };

    };

    class circle: public shape {

    public:

    circle (int x3,int y3,int r3):(5){};

    double area ( ) {return r*r*PI; };

    };

    [代码5-3]

    void main ( )

    {

    rectangle r (10,20,0);

    circle c (0,0,30);

    shape (6);

    cout<<"长方形面积="<<s1->area ( ) <<endl;

    cout<<"圆形面积="<<s2->area ( ) <<endl;

    }

    [运行结果]

    长方形面积=200

    圆形面积=2827.43


    正确答案:(1)intxyr; (2)shape(int x1int y1int r1): x(x1)y(y1)r(r1){}; (3)double virtual area()=0; (4)shape(x2y2r2) (5)shape(x3y3r3) (6)*s1=&r*s2=&c;
    (1)intx,y,r; (2)shape(int x1,int y1,int r1): x(x1),y(y1),r(r1){}; (3)double virtual area()=0; (4)shape(x2,y2,r2) (5)shape(x3,y3,r3) (6)*s1=&r,*s2=&c; 解析:本题C++代码使用虚函数用同一基类shape派生出来的Class rectangle、Class triangle、Class circle实现了计算矩形、圆形面积的计算。各空实现的功能是:(1)x,y存储长与宽,r存储半径;(2)构造函数;(3)面积虚函数,旨在定义不同面积公式;(4)构造函数;(5)构造函数;(6)类变量定义,根据下文用到的变量可推知。

  • 第3题:

    阅读以下说明及C++程序代码,将应填入(n)处的语句写在对应栏内。

    【说明】

    本程序的功能是根据矩形左上角和右下角顶点坐标生成一个矩形对象,然后输出该矩形4个顶点的坐标,计算并输出该矩形的面积。

    【C++代码】

    include<iostream>

    using namespace std;

    class MyPoint( //表示平面坐标系中的点的类

    double x;

    double y;

    public:

    MyPoint (double x,double y){this->x=x;this->y=y;}

    double getX()const{(1);}

    double getY()const{ return y;}

    void show()const{ cout<<'('<<x<<','<<y<<')';}

    };

    class MyRectangle{ //表示矩形的类

    MyPoint upleft; //矩形的左上角顶点

    MyPoint down right; //矩形的右下角顶点

    public:

    MyRectangle(MyPoint upleft,MyPoint downright);

    MyPoint getUpLeft()const{return up_left;} //返回左上角坐标

    MyPoint getDownRight()const{return down_right;} //返回右下角坐标

    MyPoint getUpRight()const; //返回右上角坐标

    MyPoint getDownLeft()const; //返回左下角坐标

    double area()const; //返回矩形的面积

    };

    MyRectangle:: MyRectangle((2)):

    up left(p1),down_right(p2){}

    MyPoint MyRectangle::getUpRight()const

    {

    return MyPoint(down_right.getX(),up_left.getY());

    }

    MyPoint MyRectangle::getDownLeft()const

    {

    return MyPeint((3));

    }

    double (4) ::area()const

    {

    return (getUpLeft(),getX()-getDownRight().getX())*

    (getDownRight().getY()-getUpLeft().getY());

    }

    int main( )

    {

    MyRectangle r(MyPoint(0,2),MyPoint(2,0));

    r.getUpLeft(),show();

    r.getUpRight().show();

    r.getDown Right().show();

    (5);

    cout<<r.area()<<end1;

    return 0;

    }


    正确答案:(1)return x (2)MyPoint p1MyPoint p2 (3)up_left.getX()down_right.getY() (4)MyRectangle (5)r.getDownLeft().show()
    (1)return x (2)MyPoint p1,MyPoint p2 (3)up_left.getX(),down_right.getY() (4)MyRectangle (5)r.getDownLeft().show() 解析:本题考查C++语言的基本语法结构和计算矩形面积。
    题目要求根据矩形左上角和右下角顶点(已知)坐标生成一个矩形对象,然后输出该矩形4个顶点的坐标,计算并输出该矩形的面积。要计算矩形的面积,首先应该求出其长和宽。其长等于矩形的右上角顶点的x坐标减去矩形的左上角顶点的x坐标;其宽等于矩形的右上角顶点的y坐标减去矩形的右下角顶点的y坐标。
    程序中定义了一个表示平面坐标系中点的类MyPoint来实现对矩形的操作,在其中定义了两个成员变量和一些公有的成员方法。第(1)空在这个类的getX()方法中,结合整个程序来看,此方法应该是用来获得平面中一点的x坐标,从紧接着的下一个函数,我们也很容易判断出这个函数的作用,因此,此空答案为return x。
    程序中又定义了一个表示矩形的类MyRectangle来实现对矩形的操作,在这个类中定义了很多对矩形进行各种操作的方法。第(2)空在其构造函数MyRectangle()中,是构造函数的参数,根据构造函数声明可以知道,其两个是MyPoint类型的两个点,结合其函数下面的语句可以知道,这两个点分别是p1和p2,因此,此空答案为MyPointp1,MyPointp2。
    在知道矩形的左上角顶点和右—下角顶点后,那么矩形的左下角顶点x坐标就等于左上角顶点的x坐标,y坐标就等于右下角顶点的y坐标。第(3)空在方法getDownLeft()下面,此方法的作用是求出矩形左下角顶点坐标并返回,它是通过调用类MyPoint的构造函数来实现的,而类MyPoint的构造函数的两个参数是平面坐标系中点的x和y坐标。因此,此空答案为up_left.getX(),down_right.getY()。
    根据代码中的内容我们可以知道,第(4)空所在的函数是实现求矩形的面积。而根据类MyRectangle中函数的声明,用来求面积的函数是它的成员函数,而 MyRectangle::area()则表示函数area()是类MyRectangle中的成员函数。因此,此空答案为MyRectangle。
    第(5)空在主函数里面,在主函数里面生成了一个矩形对象r,并给出了这个对象的左上角顶点和右下角顶点坐标。根据题目要求,最后要输出各顶点的坐标值和这个矩形的面积,而程序中已经输出了除左下角顶点外的其他顶点的坐标值,因此,此空要用来输出左下角顶点的坐标值,程序中能用来输出的函数是show(),即此空答案为 r.getDownLeft().show()。

  • 第4题:

    阅读下列C++程序和程序说明,将应填入(n)处的字句写在对应栏内。

    【说明】

    以下C++程序的功能是计算三角形、矩形和正方形的面积并输出。程序由4个类组成:类Triangle、Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述3种图形面积的通用接口。

    include<iostream.b>

    include<math.h>

    class Figure{

    public:

    virtual double getArea0=0; //纯虚拟函数

    };

    class Rectangle: (1) {

    protected:

    double height;

    double width;

    public:

    Rectangle(){};

    Rectangle(double height, double width){

    This->height=height;

    This->width=width;

    }

    double getarea(){

    return (2);

    }

    };

    class Square: (3) {

    public:

    Square(double width){

    (4);

    }

    };

    class Triangle: (5) {

    double la;

    double lb;

    double lc;

    public:

    Triangle(double la, double lb, double lc){

    this->la=la; this->lb; this->lc;

    }

    double getArea(){

    double s=(la+lb+lc)/2.0;

    return sqrt(s*(s-la)**(s-lb)*(s-lc));

    }

    };

    viod main(){

    Figure* figures[3]={

    new Triangle(2,3,3), new Rectangle(5,8), new Square(5));

    for(int i=0;i<3;i++){

    cout<<"figures["<<i<<"]area="<<(figures[i])->getarea()<<endl;

    }

    }


    正确答案:(1)public Figure (2)height*width或width*height或this->height*this->width或this->width*this->height (3)public Rectangle (4)this->height=this->width=width或height=this->width=width (5)public Figure
    (1)public Figure (2)height*width或width*height或this->height*this->width或this->width*this->height (3)public Rectangle (4)this->height=this->width=width或height=this->width=width (5)public Figure 解析:(1)public Figure
    本处由于Rectangle是派生类,需要公有继承Figure。
    (2)height*width或width*height或this->height*this->width或this->width*this->height
    本处是计算矩形的面积。
    (3)public Rectangle
    本处由于Square是派生类,需要公有继承Rectangle。
    (4)this->height=this->width=width或height=this->width=width
    本处是正方形的构造函数,是给继承的Rectangle赋初值,由于正方形长等于宽,因此应该填入:this->height=this->width=width或height=this->width=width。
    (5)public Figure
    本处由于Triangle是派生类,需要公有继承Figure,因此应该填入:public Figure。

  • 第5题:

    阅读以下说明和C++程序,将应填入(n)处的字句写在答题纸的对应栏内。

    说明

    以下程序的功能是计算三角形、矩形和正方形的面积并输出。

    程序由4个类组成:类Triangle、Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述三种图形面积的通用接口。

    c++程序

    include <iostream.h>

    inclule <math.h>

    class Figure {

    public:

    virtual double getArea()= 0; // 纯虚拟函数

    };

    class Rectangle: (1) {

    protected:

    double height;

    double width;

    public:

    Rectangle() { };

    Rectangle(double height, double width) {

    this->height = height;

    this->width = width;

    }

    double getArea() {

    return (2) ;

    }

    class Square: (3) {

    public:

    Square(double width) {

    (4) ;

    }

    };

    class Triangle: (5) {

    double la;

    double lb;

    double lc;

    public:

    Triangle(double la, double lb, double lc) {

    this->la = la; this->lb ='lb; this->lc = lc;

    }

    double getArea() {

    double s = (la+lb+lc)/2.0;

    return sqrt(s*(s-la)*(s-lb)*(s-lc));

    } }; void main() {

    Figure* figures[3] = {

    new Triangle(2,3,3), new Rectangle(5,8), new Square(5)};

    for (int i = 0; i < 3; i++) {

    com << "figures[" << i << "] area =" << (figures[i])->getArea0 << endl;

    }


    正确答案:(1)public Figure (2)height*width (3)public Rectangle (4)height=this->width=width (5)public Figure
    (1)public Figure (2)height*width (3)public Rectangle (4)height=this->width=width (5)public Figure 解析:本题以C++语言为载体,考查面向对象程序设计中的三个重要机制——继承、抽象类和动态绑定的应用。
    继承是父类和子类之间共享数据和方法的机制。这是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
    动态绑定是实现动态多态的基础,在C++中,重置是一种动态多态。重置(overriding)的基本思想是,通过一种动态绑定机制的支持,使得子类在继承父类界面定义的前提下,用适合于自己要求的实现去置换父类中的相应实现。
    抽象类的主要作用在于为派生类提供一个基本框架和一个公共的对外接口。在C++语言中,通过定义纯虚函数来定义抽象类。纯虚函数是指只给出函数声明而没有给出实现(包括在类定义的内部和外部)的虚成员函数,其格式为:在函数原型的后面加上符号“=0”。包含纯虚函数的类称为抽象类。一个抽象类的派生类应对其抽象基类的所有纯虚成员函数进行实现。
    本程序的功能是通过一个公共接口getArea()来计算不同形状图形的面积。题目中定义了4个类Figure、Rectangle(长方形)、Square(正方形)和Triangle(三角形)。在完成本题目时,一个重要的环节是确定这4个类之间的继承关系。
    第一步:确定基类。题目的说明已经指出,类Figure是一个抽象类,那么Figure只能作为基类。
    第二步:确定把Figure作为直接基类的派生类。理论上,其余的3个类都可以作为
    Figure的直接派生类。我们先假定Rectangle、Square和Triangle都是Figure的直接派生类,下面结合程序来验证一下这种继承关系是否合理:
    ▲类Rectangle是Figure的派生类,在Rectangle中将getArea进行了重置,所以第(2)空应给出getArea的实现体:计算长方形的面积,即height*width。这时需要考虑的另一个问题是继承的方式。在C++中继承有三种方式:public、private和protected,它用于说明派生类的实例的用户以及派生类的派生类对该派生类的基类成员的访问控制。由于无法确定Rectangle是否会作为其他类的基类(若存在这种情况,该类中的某些成员函数可能会是其他类的公共接口),所以选择public继承方式,则第(1)空应填public Figure。
    ▲类Triangle是Figure的派生类,在该类中也给出了getArea的实现,所以第(5)空应该填public Figure。
    ▲对类Square来说,它的基类可能有两个:Figure和Rectangle。Square本身是一种图形,同时Square也是一种特殊的Rectangle。但是在类Square中没有提供对方法 getArea的重新定义,所以Square不可能作为Figure的派生类。那么,它的基类只能是 Rectangle,所以第(3)空应填publicRectangle。显而易见,第(4)空是要给出计算正方形面积的操作。这时可以借助其基类Rectangle的getArea方法,此时需要做的是将正方形的边长width传递到基类Rectangle的属性height和width中即可,所以第(4)空应填height=this->width=width。这也是第(3)空选择public继承方式的原因。
    [*]
    此时我们可以得出题目中4个类的继承关系如下:
    其中箭头表示继承关系。

  • 第6题:

    阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。

    【说明】

    下面程序的功能是计算并输出某年某月的天数,函数IsLeap Year()能够判断是否是闰年。

    【C++程序】

    include < iostream >

    using namespace std;

    (1) Month {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };

    class Date {

    public:

    Date( int year, Month m_ month) {

    this→year = year;

    if( (2) ) month: Jan;

    else month = m_ month;

    };

    ~Date(){};

    bool IsLeap Year( ) {

    return ((year%4= =0 &&year% 100 ! =0)|| year%400= =0);

    };

    int CaculateDays( ) {

    switch(m_month ) {

    case (3) ;{

    if (4) return 29;

    else return 28;

    }

    case Jan: case Mar: case May: case Jul: case Aug: case Oct: case Dec: return 31;

    case Apr: case Jun: case Sop: case Nov: return 30;

    }

    }

    private:

    int year;

    Month month;

    };

    void main( ) {

    Date day(2000,Feb);

    cout < <day. (5) ( );

    }


    正确答案:(1)enum
    (1)enum 解析:枚举类型变量month定义,这里填入enum。

  • 第7题:

    阅读以下说明和JAVA 2代码,将应填入(n)处的字句写在对应栏内。

    [说明]

    以下程序为类类型的变量应用实例,通过异常处理检验了类CCircle的变量的合法性,即参数半径应为非负值。仔细阅读代码和相关注释,将程序补充完整。

    [JAVA代码]

    //定义自己的异常类

    class CCircleException extends Exception

    {

    }

    // 定义类 CCircle

    class CCircle

    {

    private double radius;

    public void setRadius ( double r ) (1)

    {

    if ( r<0 ) {

    (2)

    }

    else

    (3)

    }

    Public void show ( ) {

    System. out. println ( "area="+3.14*radius*radius );

    }

    }

    public class ciusample

    {

    public static void main ( String args[] )

    {

    CCircle cir=new CCircle( );

    (4) {

    cir. setRadius ( -2.0 )

    }

    (5)

    {

    System. out. println ( e+" throwed" ) ;

    }

    cir. show( ) ;

    }

    }


    正确答案:(1)throws CCircleException (2)throw new CCircleException(); //抛出异常 (3)radius=r; (4)try (5)catch(CCircleException e) //捕捉由setRadius()抛出的异常
    (1)throws CCircleException (2)throw new CCircleException(); //抛出异常 (3)radius=r; (4)try (5)catch(CCircleException e) //捕捉由setRadius()抛出的异常 解析:本题主要考查JAVA语言中Class类型的变量应用。本段代码中对于类Ccircle的半径变量进行合法性检验,如果圆Ccircle的半径为负值,则抛出异常处理。

  • 第8题:

    阅读下列程序说明和C程序,将应填入(n)处的字句写在对应栏内。

    [函数2.1说明]

    下面程序的功能是计算x和y的最小公倍数。

    [函数2.1]

    main()

    { int m,n,d,r;

    seanf("%d %d",&m,&n);

    if(m<n) {r=m;m=n;n=r;}

    (1);

    while (d%n! =0) (2);

    printf("%d\n",d);

    }

    [函数2.2说明]

    下述程序接收键盘输入,直到句点“.”时结束。输入的字符被原样输出,但连续的空格输入将转换成一个空格。

    [函数2.2]

    include <stdio.h>

    main()

    { char c,preChar='\0';

    c = getchar();

    while(c! = '.'){

    if((3)) putchar(c);

    else if(preChar! =' ') putchar(c);

    (4);

    c=(5);

    }

    }


    正确答案:(1)d=m (2) d+=m或d=d+m (3) c!=‘’ (4) preChar=c (5) getchar()
    (1)d=m (2) d+=m或d=d+m (3) c!=‘’ (4) preChar=c (5) getchar() 解析:(1)下文使用了变量d,因此需在此初始化,由下面循环的条件“d%n!=0”知初值不能是n,因此必为m;
    (2)此处while循环生成最小公倍数d,其终止条件是n整除d,因此循环过程中需要保证m整除d并且d尽可能地小,于是d应以m为增量递增;
    (3)当输入的字符非空格时,原样输出;
    (4)程序中变量preChar用于记录上一次读入的字符,循环过程中应不断更新其值;
    (5)接收下一个输入。

  • 第9题:

    试题三(共 15 分)

    阅读以下说明和 C 程序,将应填入 (n) 处的字句写在答题纸的对应栏内。


    正确答案:

  • 第10题:

    阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内

    [说明]

    以下程序的功能是计算三角形、矩形和正方形的面积并输出。

    程序由4个类组成:类Triangle,Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述三种图形面积的通用接口。

    [C++程序]

    include<iostream.h>

    include<math.h>

    class Figure{

    public:

    virtual double getArea()=0; //纯虚拟函数

    };

    class Rectangle: (1) {

    protected:

    double height;

    double width;

    public:

    Rectangle(){};

    Rectangle(double height,double width){

    This->height=height;

    This->width=width;

    }

    double getarea(){

    return (2);

    }

    };

    class Square: (3)

    public:

    square(double width){

    (4);

    }

    };

    class triangle: (5) {

    double la;

    double lb;

    double lc;

    public:

    triangle(double la,double lb,double lc){

    this->la=la;thiS->ib;this->lc;

    }

    double getArea(){

    double s=(la+lb+lc)/2.0;

    return sqrt(s*(s-la)**(s-lb)*(s-lc));

    }

    };

    viod main(){

    figure*figures[3]={

    new triangle(2,3,3),new Rectangle(5,8),new Square(5)};

    for(int i=0; i<3;i++){

    cout<<"figures["<<i<<"]area="<<(figures)->getarea()<<endl;

    }

    }

    };


    正确答案:(1) public Figure (2) height*width (3) public Rectangle (4) this->height=this->width=width (5) public Figure
    (1) public Figure (2) height*width (3) public Rectangle (4) this->height=this->width=width (5) public Figure 解析:本题考查C++编程中的几个重要概念。
    Figure类是一个抽象类,其他三个类rectangle、square、triangle都要直接或间接继承该类,所以(1)(5)处应为“public Figure”。(2)处是要计算矩形面积,矩形面积等于长乘以宽,所以(2)处应为“height* ]width”。正方形是一个特殊的矩形,所以可以继承矩形类,所以(3)处应为“publicRectangle”,(4)处应为“this->height=this->width=width”。

  • 第11题:

    阅读以下说明和C++程序代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    在下面的C++代码中,类SalesTicket能够完成打印票据正文的功能,类HeadDec- orator与FootDecorator分别能够完成打印票据的台头和脚注的功能。

    已知该程序运行后的输出结果如下所示,请填补该程序代码中的空缺。

    这是票据的台头!

    这是票据正文!

    这是票据的脚注!

    ---------------

    这是票据的台头!

    这是票据的脚注!

    【C++程序代码】

    #include

    using namespace std;

    class SalesTicket {

    public:

    (1) printTicket() { cout << " 是票据正文!" << endl;}

    class Decorator : public SalesTicket{

    SalesTicket *ticket;

    public:

    Decorator(SalesTicket *t){ ticket = t; }

    void printTicket(){

    if(ticket != NULL)

    ticket->printTicket();

    }

    };

    class HeadDecorator : public Decorator{

    public:

    HeadDecorator(SalesTicket *t): (2) { }

    void printTicket() {

    sour << "这是票据的台头!" << endl;

    Decorator::printTicket();

    }

    };

    class FootDecorator :public Decorator{

    public:

    FootDecorator(SalesTicket *t): (3)

    void printTicket() {

    Decorator::printTicket();

    cout << "这是票据的脚注!" << endl;

    }

    };

    void main(void) {

    SalesTicket t;

    FootDecorator f(&t);

    HeadDecorator h( (4) );

    h.printTicket();

    cout << "-------------------------"<< endl;

    FootDecorator a(NULL);

    HeadDecorator b( (5) );

    b.printTicket();

    }


    正确答案:(1)virtual void (2)Decorator(t) (3)Decorator(t) (4)&f (5)&a
    (1)virtual void (2)Decorator(t) (3)Decorator(t) (4)&f (5)&a 解析:本题实际上使用了设计模式中的Decorator模式。
      从代码可以分析得出,类SalesTicket完成了票据正文的输出,FootDceorator和 HeadDecorator类都继承了Decorator,Decorator继承SalesTicket,FootDecorator和HeadDe- corator类在构造函数的时候都需要对其父类进行初始化,因此,空(2)和(3)应为 Decorator(t);这些类中都具有printTicket方法,根据SalesTicket类中方法的定义可以得出,此方法的返回值为void类型,分析主程序中h.printTicket()可以输出“这是票据的台头!这是票据正文!这是票据的脚注!”的结果,并且考虑到h.printTieket()的执行路径为先执行cout<<"这是票据的台头!"<

  • 第12题:

    阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。
    【说明】
    某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种
    类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。






    答案:
    解析:

  • 第13题:

    阅读以下说明和C++代码,将应填入(n)处的字句写在对应栏内。

    【说明】

    以下C++程序的功能是计算三角形、矩形和正方形的面积并输出。程序由4个类组成:类 Triangle、Rectangle和Square分别表示三角形、矩形和正方形:抽象类Figure提供了一个纯虚函数getAxea(),作为计算上述3种图形面积的通用接口。

    【C++代码】

    include<iostream>

    include<cmath>

    using namespace std;

    class Figure{

    public:

    virtual double getArea()=0;//纯虚函数

    };

    class Rectangle : (1) {

    protected:

    double height;

    double width;

    public:

    Rectangle(){}

    Rectangle(double height, double width){

    this->height=height;

    this->width=width;

    }

    double getArea(){

    return (2);

    }

    };

    class Square: (3) {

    public:

    Square(double width){

    (4);

    }

    };

    class Triangle: (5) {

    private:

    double la,lb,lc;

    public:

    Triangle(double la,double lb,double lc){

    this->la=la;this->1b=1b;this->lc=lc;

    }

    double getArea(){

    double s=(la+lb+lc)/2.0;

    return sqrt(s*(s-la)*(s-lb)*(s-lc));

    }

    int main()

    {

    Figure *figures[3]={new Triangle(2,3,3),new Rectangle(5,8), new Square(5)};

    for(int i=0;i<3;i++){

    cout<<"figures["<<i<<"]area="<<(figures[i])->getArea()<<endl;

    }

    return 0;

    }


    正确答案:(1) public Figure (2) height *width (3) public Rectangle (4) height=this->width=width (5) public Figure
    (1) public Figure (2) height *width (3) public Rectangle (4) height=this->width=width (5) public Figure 解析:根据题述“抽象类Figure提供了一个纯虚函数getArea(),作为计算上述3种图形面积的通用接口”,可知类Rectangle均应继承自类Figure,并实现其抽象方法getArea。故空(1)应填 public Figuare。
    getArea方法是计算面积的,空(2)是返回该类的代表的图形面积。类Rectangle代表矩形,而矩形的面积的计算公式是长与宽的乘积,类Rectangle的成员变量height和width分别代表了长和宽,故空(2)应填height*width。
    类Square按理应该继承自Figuare,但并未实现其抽象方法getArea,若继承自Figure则不能被实例化,而题中main函数中已将其实例化,不符合题意,因此不能继承自Figure。考虑到正方形其实就是长和宽相等的矩形,因此Square可从Rectangle继承,故空(3)应填public Rectangle。这样,计算面积仍用Rectangle的getArea方法,这就要求将height和width正确赋值,题中已将这两个成员变量声明为protected,因此这两个变量继承为子类的变量,故空(4)应填height=this->width=width。
    空(5)同空(1),应填public Figure。

  • 第14题:

    使用VC6打开考生文件夹下的工程test3_3,此工程包含一个源程序文件test3_3.cpp,其中建立了普通的基类base用于存储边的信息,建立派生类triangle和square,用于存储三角形和正方形的信息。按要求完成下列操作,将类定义补充完整。

    (1)定义基类base的保护数据成员x和y用于记录边的长度,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。

    (2)完成基类base默认构造函数的定义,把数据成员x和y分别初始化为参数a和b的值,要求使用作用域符“::”。请在注释“//**2**”之后添加适当的语句。

    (3)完成派生类triangle函数disp的定义,使其以“三角形面积:”的格式将三角形的面积输出到屏幕上。请在注释“//**3**”之后添加适当的语句。

    (4)添写派生类square的默认构造函数的定义,使其调用基类的构造函数,记录下正方形的边长信息a,其缺省值为0。请在注释“//** 4 **”之后添加适当的语句。

    输出结果如下:

    三角形面积:200

    正方形面积:400

    注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

    源程序文件test3_3.cpp清单如下:

    include<iostream.h>

    class base

    {

    protected:

    //** 1 **

    public:

    base(int a,int b)

    {

    //** 2 **

    }

    virtual void disp(){cout<<"调用base基类"<<endl;)

    };

    class triangle:public base

    {

    public:

    triangle(int a,int b):base(a,b){};

    void disp()

    {

    //** 3 **

    }

    };

    class square:public base

    {

    public:

    //** 4 **

    void disp(){cout<<"正方形面积:"<<x*y<<endl;}

    };

    void main()

    {

    base *p;

    triangle t(20,20);

    square s(20);

    p=&t;

    p—>disp();

    p=&S;

    p->disp();

    }


    正确答案:(1) int x; int y; (2) base::x=a; base::y=b; (3) cout"三角形面积:"x*y*0.5endl; (4) square(int a=0):base(aa){};
    (1) int x; int y; (2) base::x=a; base::y=b; (3) cout"三角形面积:"x*y*0.5endl; (4) square(int a=0):base(a,a){}; 解析:本题考查考生对类的继承与派生的掌握,包括派生类对基类成员的访问和派生类构造函数的定义等知识点。其中(4)是对类的构造函数设定参数的缺省值,该函数应该实现将参数传递给基类的功能。

  • 第15题:

    阅读以下说明和C++程序,将应填入(n)处的语句写在的对应栏内。

    【说明】

    以下程序的功能是计算三角形、矩形和正方形的面积并输出。

    程序由4个类组成:类Triangle、Rectangle和Square分别表示三角形、矩形和正方形;抽象类Figure提供了一个纯虚拟函数getArea(),作为计算上述3种图形面积的通用接口。

    【C++程序】

    include<iostream.h>

    include<math.h>

    class Figure {

    public:

    virtual double getArea()=0; //纯虚拟函数

    };

    class Rectangle:(1){

    protected:

    double height;

    double width;

    public:

    Rectangle() {};

    Rectangle(double height,double width) {

    this->height=height;

    this->width=width;

    }

    double getArea() {

    return (2);

    }

    };

    class Square:(3){

    public:

    Square(double width){

    (4);

    }

    };

    class Triangle:(5){

    double la;

    double lb;

    double lc;

    Public:

    Triangle(double la, double lb, double lc) {

    This->la=la; this->lb=lb; this->lc=lc;

    }

    double getArea() {

    double s = (la+lb+±c)/2.0;

    return sqrt(s,(s-la)*(s-lb)*(s-Ic));

    }

    };

    void main() {

    Figure*figures[3]={

    new Triangle(2,3,3), new Rectangle(5,8), new SqUare(5));

    for(int i=0;i<3;i++){

    cout<<"figures["<<i<<"]area="<<(figures[i])->getArea()<<endl;

    }

    }


    正确答案:(1)public Figure (2) height * width (3) public Rectangle (4)this->height=this->width=width (5)public Figure
    (1)public Figure (2) height * width (3) public Rectangle (4)this->height=this->width=width (5)public Figure 解析:类Triangle、Rectangle和Square分别表示三角形、矩形和正方形,它们都需要求各自的面积,而抽象类Figure提供了一个纯虚拟函数getArea(),所以类Rectangle以类Figure为基类,公有继承,所以(1)空应填入“public Figure”。(2)空处为类Rectangle中求面积函数的返回值,所以根据长方形面积公式应填入“height*width”。
    类Square表示正方形,它是特殊的长方形,所以可以从代表长方形的类Rectangle公有继承它的成员,所以(3)空应填入“public Rectangle”。(4)空处为类Square的构造函数的函数休,显然是长等于宽,所以应填入"this->height=this->width=width”。
    最后类Triangle同样从虚基类公有继承,所以(5)空应填入“public Figure”。

  • 第16题:

    阅读以下说明和Java源程序,将应填入(n)处的字句写在答题纸的对应栏内。

    说明

    以下程序的功能是计算三角形、矩形和正方形的面积并输出。

    程序由5个类组成:AreaTest是主类,类Triangle、Rectangle和Square分别表示三角形、矩形和正方形,抽象类Figure提供了一个计算面积的抽象方法。

    程序

    public class AreaTest{

    public static void main(String args[]){

    Figure[]figures={

    new Triangle(2,3,3),new Rectangle(5,8), new Square(5)

    };

    for(int i=0;i<figures.1ength;i++){

    System.out.println(figures[i]+"area="+figures[i].getArea());

    }

    }

    }

    public abstract class Figure{

    public abstract double SetAJea();

    public class Rectangle extends (1) {

    double height;

    double width;

    public Rectangle(double height,double width){

    this.height=height;

    this.width=width;

    }

    public String toString(){

    return "Rectangle:height="+height+",width="+width+":";

    }

    public double getArea() { return (2);

    } } public class Square extends (3) {

    public Square(double width) {

    (4);

    }

    public String toString() {

    return "Square:width="+width+":";

    } } public class Triangle extends (5). {

    double la;

    double lb;

    double lc;

    public Triangle(double la,double lb,double lc) {

    this.la=la; this.lb=lb; this.lc=lc;

    public String toString(){

    return "Triangle: sides="+la+","+lb+","+lc+":";

    public double getArea() {

    double s=(la+lb+lc)/2.0;

    return Math.sqrt(s*(s-la)*(s-lb)*(s?1c));

    }

    }


    正确答案:(1)Figure (2)height*width (3)Rectangle (4)super(widthwidth) (5)FiguTe
    (1)Figure (2)height*width (3)Rectangle (4)super(width,width) (5)FiguTe 解析:本题以Java语言为载体,考查面向对象程序设计中的三个重要机制——继承、抽象类和动态绑定的应用。本题所解决的问题与试题6一样,有关的详细描述可参见试题6的分析。
    在Java语言中通过在类中定义抽象方法来创建一个抽象类,或者直接将一个类声明为抽象类。
    由于继承关系已经确定,所以第(1)、(3)、(5)空已经确定,分别为Figure、Rectangle和Figure。第(2)空应填height*widthn
    Java中有一个特殊的函数super,用于在派生类中调用其基类的构造函数。利用 super,我们可以借助Rectangle的带有2个参数的构造函数将正方形的边长width传递到Rectangle的height和width中,所以第(4)空应填super(width,width)。

  • 第17题:

    阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。

    【说明】

    以下程序的功能是计算正方体、球体和圆柱体的表面积和体积并输出。

    程序由4个类组成:类cube、sphere和cylinder分别表示正方体、球体和圆柱体;抽象类 container为抽象类,提供了两个纯虚拟函数surface_area()和volum(),作为通用接口。

    【C++程序】

    include<iostream.h>

    define pi 3.1416

    class container{

    protected:

    double radius;

    public:

    container(double radius) {container::radius=radius;}

    virtual double surface_area()=0;

    virtual double velum()=0;

    };

    class cube:(1){ //定义正方体类

    public:

    cube(double radius):container(radius){};

    double surface_area () {return 6 * radius * radius;}

    double volum() {return radius * radius * radius;}

    };

    class sphere:(2){ //定义球体类

    public:

    sphere(double radius): container(radius){};

    double surface_area() { return (3);}

    double volum() {return pi * radius * radius * radius * 4/3;}

    };

    class cylinder:(4){ //定义圆柱体类

    double height;

    public:

    cylinder(double radius,double height):container(radius)

    {

    container::height=height;

    }

    double surface_are a () { return 2 * pi * radius * (height+radius); }

    double volum () {return (5);}

    };

    void main()

    {

    container * p;

    cube obj1 (5);

    sphere obj2(5);

    cylinder obj3(5,5);

    p=&obj1;

    cout<<“正方体表面积”(<<p->surface_area()<<end1;

    cont<<“正方体体积”<<p->volume()<<end1;

    p=&obj2;

    cout<<“球体表面积”<<p->surface_area()<<end1;

    cout<<“球体体积”<<p->volume()<<end1;

    p=&obj3;

    cout<<“球体表面积”<<p->surface_area()<<end1;

    cout<<“球体体积”<<p->volume()<<end1;

    }


    正确答案:(1)public container (2)public container (3) 4 * pi * radius * radius (4) public container (5)pi * radius * radius * height
    (1)public container (2)public container (3) 4 * pi * radius * radius (4) public container (5)pi * radius * radius * height 解析:类cube、sphere和cylinder分别表示正方体、球体和圆柱体,它们都需要求各自的表面积和体积,而抽象类container提供纯虚拟函数 surface_area()和velum(),所以类cube、sphere和cylinder都以类contain为基类,公有继承,所以(1)、(2)和(4)空应填入“public container”。
    (3)空处为类sphere中求表面积函数的返回值,所以根据球体表面积公式应填入“4*pi*radius*radius”。
    (5)空处为类cylinder中求圆柱体体积函数的返回值,所以根据圆柱体体积公式应填入“pi*radius*radius*height”。

  • 第18题:

    阅读下列程序说明和C++程序,把应填入其中(n)处的字句,写在对应栏内。

    【说明】

    阅读下面几段C++程序回答相应问题。

    比较下面两段程序的优缺点。

    ①for (i=0; i<N; i++ )

    {

    if (condition)

    //DoSomething

    else

    //DoOtherthing

    }

    ②if (condition) {

    for (i =0; i<N; i++ )

    //DoSomething

    }else {

    for (i=0; i <N; i++ )

    //DoOtherthing

    }


    正确答案:程序1优点:程序简洁;缺点:多执行了N-1次逻辑判断并且程序无法循环“流水”作业使得编译器无法对循环进行优化处理降低了效率。 程序2优点:循环的效率高;缺点:程序不简洁。
    程序1优点:程序简洁;缺点:多执行了N-1次逻辑判断,并且程序无法循环“流水”作业,使得编译器无法对循环进行优化处理,降低了效率。 程序2优点:循环的效率高;缺点:程序不简洁。

  • 第19题:

    阅读以下说明和C++代码。

    [说明]

    已知类SubClass的getSum方法返回其父类成员与类SubClass成员j的和,类 SuperClass中的getSum为纯虚拟函数。程序中的第23行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,分析程序运行到第15行且尚未执行第15行的语句时成员变量j的值,最后给出程序运行后的输出结果。

    [C++代码]


    正确答案:(1)this->j (2)SuperClass∷ 错误更正结果:SuperClass*s=new SubClass(-3); 变量i的值:0 运行结果:-32
    (1)this->j (2)SuperClass∷ 错误更正结果:SuperClass*s=new SubClass(-3); 变量i的值:0 运行结果:-3,2 解析:本题考查的是面向对象程序设计语言C++。
    考查的主要知识点为C++程序设计语言中类成员变量的初始化、父类成员方法的调用、对象的构造等。第一空要求用用参数j的值更新数据成员,由于成员变量名也为i因此需要明确地指出需要更新的变量j为类中的成员变量,可以在前面加上一个明确的前缀this来表示,因此(1)处应填写this->j:(2)处要求调用父类的成员方法getValue(),为了和子类中的getValue()相区别,需要加上域前缀,因此(2)处应该填写SuperClass∷,表明该函数属于类SuperClass;在程序的第23行,由于SuperClass s表明已经定义了一个对象,因此,后面不应该使用new再次分配一个对象,但是后面的程序代码将s作为一个对象指针使用,因此需要将s定义为一个指针,因此更改后结果应为:SuperClass*s= new SubClass(-3);当程序运行到第15行但是还没有执行15行的语句时,成员变量i的值应为构造函数初始化列表中指定的j的初始化值,本题目为0:最后程序的输出为-3和 2,-3为子类中成员变量j的值,而2表示父类中i的值和子类中i的值的和。

  • 第20题:

    ●试题二

    阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

    【说明】

    该程序运行后,输出下面的数字金字塔

    【程序】

    include<stdio.h>

    main ()

    {char max,next;

    int i;

    for(max=′1′;max<=′9′;max++)

    {for(i=1;i<=20- (1) ;++i)

    printf(" ");

    for(next= (2) ;next<= (3) ;next++)

    printf("%c",next);

    for(next= (4) ;next>= (5) ;next--)

    printf("%c",next);

    printf("\n");

    }

    }


    正确答案:
    ●试题二【答案】(1)(max-′0′)(2)′1′(3)max(4)max-1(5)′1′【解析】该程序共有9行输出,即循环控制变量max的值是从1~9。每行输出分3部分,先用循环for语句输出左边空白,(1)空填"(max-′0′)";再用循环输出从1到max-′0′的显示数字,即(2)空和(3)空分别填1和max;最后输出从max-′1′~1的显示数字,即(4)空和(5)空分别填和max-1和′1′。

  • 第21题:

    从下列2道试题(试题五至试题六)中任选 1道解答。如果解答的试题数超过1道,则题号小的1道解答有效。

    试题五(共15分)

    阅读以下说明、图和C++代码,填补C++代码中的空缺(1)~(5),将解答写在答题纸的对应栏内。

    【说明】

    已知对某几何图形绘制工具进行类建模的结果如图5.1所示,其中Shape为抽象类(应至少包含一个纯虚拟( virtual)函数),表示通用图形,Box表示矩形,Ellipse表示椭圆,Circle表示圆(即特殊的椭圆),Line表示线条。

    下面的C++代码用于实现图5-1所给出的设计思路,将其空缺处填充完整并编译运行,输

    出结果为:

    Ellipse

    Circle

    Ellipse

    C

    E

    【C++代码】

    include <string>

    include <iostream>

    using namespace std;

    class Shape{

    public:

    Shape(const string& name){

    m_name= name;

    }

    ~Shape(){}

    (1) void paint() = 0;

    stringgetName()const {

    retumm name;

    }

    Private:

    string m_name;

    };

    //Box和 Line类的定义与 Ellipse类似,其代码略

    classEllipse (2) {

    public:

    Ellipse(const string& name) : Shape(name){ cout<<"Ellipse" <<endl; }

    Voidpaint() { cout<<getName()<<endl;}

    };

    classCircle (3) {

    public:

    Circle(const string& name) : Ellipse(name){ cout<<"Circl"<<endl; }

    };

    class Diagram {

    public:

    void drawAShap(Shape* shape){ shape->paint(); }

    void drawShapes() {

    shapes[0] = new Circle("C");

    shapes[l] = new Ellipse("E");

    for (int i=O;i<2; ++1) {

    drawAShap(shapes[i]);

    }

    }

    void close (){ /*删除形状,代码略 */ }

    private:

    Shape* shapes[2];

    };

    int main( )

    {

    Diagram* diagram = (4)

    diagram->drawShapes();

    diagram->close ();

    (5) diagram;

    }


    正确答案:
    试题五分析
    本题考查C++语言程序设计的能力,涉及类和抽象类、对象、函数和虚函数的定义和相关操作,以及继承关系。要求考生根据给出的案例和执行过程说明,认真阅读理清程序思路,然后完成题目。
    先考查类图整体结构。本题中根据类图定义了类:Diagram、Shape、 Box、 Ellipse、Line和Circle。其中Shape为抽象类,表示通用图形,抽象类中应至少包含一个纯虚拟( virtual)函数。Box表示矩形,Ellipse表示椭圆,Line表示线条,三者都是Shape的子类,继承了Shape类,Circle表示圆(即特殊的椭圆),继承了Ellipse。抽象类Shape的定义中,需要通过使用virtual标识虚函数,void paint()=0;表示paint()是纯虚函数,其定义前必须添加virtual进行表示。类Ellipse为Shape的子类,Circle为Ellipse的子类,需要在代码中体现出继承。另外,在子类的构造函数中,调用父类的构造函数,所以继承的权限为public。其语法为:public后加类名。
    类Diagram中没有定义构造函数,编译器生成一个缺省的构造函数,调用是采用new关键字加类名。使用完成之后,通过delete进行释放。
    因此空(1)需要表现出paint()函数为纯虚函数,即为virtual;空(2)和空(3)处添力口继承父类,并且权限为public,即为:public Shape和:public Ellipse;空(4)处补充通过使用编译器生成的缺省构造函数创建对象,即new Diagram;空(5)处通过delete释放new创建的对象diagram。
    参考答案
    (1) virtual
    (2):public Shape
    (3): public Ellipse
    (4) new Diagram
    (5) delete

  • 第22题:

    ()阅读下列说明和C语言程序,将应填入 (n)处的语句写在答题纸的对应栏内。[说明]下面程序是一个带参数的主函数,其功能是显示在命令行中输入的文本文件内容。[C语言函数]#include"stdio.h"main(argc,argv) int argc; char *argv[]; { (1) ; if((fp=fopen(argv[1],”r’’))== (2) ) { printf(”file not open!\n”);exit(0);} while( (3) ) putchar( (4) ); (5); }


    正确答案:()
    (1)FILE *fp; (2)NULL  (3)!feof(fp)  (4)fgetc(fp)   (5)fclose(fp)
    从程序功能来看,程序中需要用到文件型指针变量中,而主函数体没有定义,所以(1)应该填写的是“FILE *fp;”。接下来的语句是标准的打开只读文本文件的语句,显示的是文件没打开,说明文件名不存在,也就是为“NULL”。接着的while循环语句中有两处空白。前一个空白是控制循环的条件,从程序功能来看,要将文本文件中的所有字符显示出来,这儿当然只能填写“不是文件尾则继续循环”,具体说,需要填写的是“!feof(fp)”。(4)出现在循环体中的语句中,该循环体的功能是从fp指向的文本文件中读取单个字符并显示在屏幕上,此处使用的是putchar函数,该函数的功能是将形参对应的字符显示在屏幕上,所以该处的空白就是要显示的字符,这个字符必须是从文本文件中读取的单个字符,完成这项工作的可以利用fgetc()函数,所以(4)填写的是“fgetc(fp)”。最后一句应当是关闭文件,所以(5)应填fclose(fp)。

  • 第23题:

    阅读下列说明和C++-代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。

    【C++代码】 #include using namespace std; class invoice{ public: (1){ cout<<"This is the content of the invoice!"<

    答案:
    解析:
    (1) virtual void printInvoice() (2) ticket->printInvoice() (3) Decorator::printInvoice() (4) Decorator::printInvoice() (5) &a
    【解析】

    试题分析
    1.Invoice类下,义虛函数,按类图,函数名是printInvoice
    2.前面定义对象名是ticket,那么在ticket不为空的时候调用函数printInvoice
    3.这部分填写发票的抬头,看类图应该实现函数printInvoice ,Decorator装饰模式使用该方法
    4.这部分是发票的脚注,看类图应该实现函数printlnvoice,Decorator装饰模式使用该方法
    5.FootDecorator a(NULL) ;脚步的装饰参数是a,调用a参数,