问答题 阅读下列说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
设计RGB方式表示颜色的调色板,进行绘图,其类图如下图所示。该程序的C++代码附后。
【正确答案】
【答案解析】free(palette)
this->number
static const
new MyColor
new Drawing() [解析] 本题考查C++程序设计的能力,涉及类、对象、方法定义和相关操作。要求考生根据给出的案例和代码说明,认真阅读并理清程序思路,然后完成题目。
先考查题目说明。本题目中涉及到颜色、调色板、绘图等类以及初始化和调色相关等操作。根据说明进行设计。
类图中给出三个类Drawing、Palette和MyColor及其之间的关系。Drawing与Palette、MyColor之间具有关联关系,Palette与MyColor之间是聚合关系。
MyColor为以RGB方式表示颜色,由属性red、green和blue表示,每个MyColor对象即为一个RGB颜色。MyColor具有两个构造器,缺省构造器将RGB颜色均初始化为0;带参数的构造方法将当前对象的RGB值设置为调用构造方法时消息中所传递的参数值。print()用来输出当前对象的RGB值供测试使用。
Palette类用于表示调色板,其调色板颜色数量,用int型number表示,其MyColor对象指针数组,用指向指针的指针MyColor** palette表示。Palette的缺省构造方法中,将number设置为256色,并将palette指向动态申请存储256色MyColor对象指针的空间。另一个构造方法Palette(MyColor** pale,int number)中参数有指向MyColor对象指针数组的指针pale以及颜色数量number。该构造方法设置当前调色板对象的颜色数量,用this->number表示当前对象的number属性,动态申请该数量对应的MyColor指针类型的number个存储空间,并将此存储空间复制给属性palette。析构方法先用delete删除用new创建的每个MyColor对象,并用free释放采用malloc函数动态申请的存放MyColor对象指针的存储空间。print()方法用来打印palette中每个颜色对象的颜色,供测试使用。在print()函数体内部,为每个数组元素调用当前对象的print()打印一个RGB颜色。
Drawing类属性int COLORNUMBER定义绘画时所用的颜色数量(本例中设置为16表示基于16色绘图)。void draw()方法声明调色板Palette palette、定义COLORNUMBER色MyColor对象指针数组color,随机生成RGB颜色并根据此颜色创建COLORNUMBER个MyColor对象,即循环COLORNUMBER次,每次循环生成随机的RGB颜色后调用MyColor的带参数构造器创建MyColor对象,即:
color [i]=new MyColor(red,green,blue);
所有颜色数组创建完成后,基于所创建的COLORNUMBER个MyColor对象指针数组创建调色板,即:
palette=new Palette(color,COLORNUMBER);
调用调色板的print()方法进行打印(模拟绘图)。最后将MyColor对象指针元素进行删除。由于COLORNUMBER的作用是绘图的颜色数量,在创建MyColor对象指针数组时作为元素个数,所以,需要是static const静态常量。
主控逻辑代码在main函数中实现。在main()函数中,创建Drawing对象指针d,即生成一个绘图对象:
Drawing *d=new Drawing();
并进行绘图,即调用d的draw()方法,实现绘图功能。在使用完对象之后,需要对new出的对象采用delete操作进行释放对象,对d对象进行删除,即delete d;,释放内存。
综上所述,空(1)需要表示释放malloc函数申请的动态内存的函数,即ffee(palette);空(2)需要表示当前对象的number属性,即this->number;空(3)需要修饰COLORNUMBER为静态常量,即static const;空(4)需要调用MyColor的构造方法创建MyColor对象,即new MyColor;空(5)处为创建Drawing类的对象指针d的newDrawing()。