导航菜单
首页 >  高级程序员资格考试真题答案解析  > 2020年程序员考试下午真题(专业解析+参考答案) · 程序员历年真题含答案与解析

2020年程序员考试下午真题(专业解析+参考答案) · 程序员历年真题含答案与解析

试题解析:

本题考查C++语言程序设计的能力,涉及类、对象、函数的定义和相关操作。要求考生根据给出的案例和代码说明,阅读并完成程序填空。本题目中涉及打印订单内容、打印抬头和打印脚注。根据说明进行设计,题目给出了类图(图6-1类图所示)。图中类Order有PrintOrder和Decorator两个子类。Decorator与Order之间为聚合关系。Decorator有两个子类HeadDecorator和FootDecorator,分别实现打印抬头和打印脚注的功能。C++语言中,子类继承父类使用冒号(:)加父类实现。Order类中定义虚函数virtual voidprintOrder()方法,实现打印“订单内容”。Decorator中定义私有Order成员,即:并且定义带参数构造器:其中对order进行初始化。C++中,一个类有显式定义带参数构造器时,编译器就不会自动生成缺省的构造器,而子类构造器中首先调用父类的构造器,缺省的情况下调用父类的缺省不带参数构造器,带参数构造器需要显式调用,形式为冒号(:)加上父类的带参数构造器。对象的属性若为引用类型,自动初始化为NULL,所以需要在构造器中对order加以显式初始化。其构造器接收order,参数名称与对象的属性名均为order,需要用this关键字来引用当前对象或类实例,可以用this->或(this).取属性或行为,即:Decorator覆盖父类的printOrder()方法。在printOrder()方法中,实现order不为空引用时,采用order->printOrder()调用Order的printOrder()方法,实现打印“订单内容”;而若order为空时,则不进行调用,即没有打印订单内容。HeadDecorator类和FootDecorator类中均定义带Order类型的参数的构造器。在C++中,构造器中自动调用父类的缺省无参数构造器,而Decorator中只定义了带参数构造器,因此,需要显式调用父类Decorator中的带参数构造器,形式为:构造器名(参数),即Decorator(order),对Decorator中私有成员order进行初始化。HeadDecorator覆盖父类的printOrder()方法。在printOrder()方法中,先打印“订单抬头”,再使用Decorator::printOrder()调用父类的printOrder()方法打印“订单内容”。FootDecorator覆盖父类的printOrder()方法。在printOrder()方法中,先使用Decorator::printOrder()调用父类的printOrder()方法打印“订单内容”,再打印“订单脚注”。在PrintOrder类中,实现整体订单的打印逻辑。其中定义Order属性变量order,构造器PrintOrder(Order order)中对order进行初始化,因为参数名称也是order, 所以需要采用this->order或(this).order区分对象的属性。在printOrder()方法中,实现的主要逻辑为打印“订单内容”的基础上,加上打印“订单抬头”和“订单脚注”。此时,order对象不为NULL时只可以打印“订单内容”,再执行如下语句:实现在打印“订单内容”的基础上,加上打印“订单抬头”,再执行如下语句:实现在打印“订单内容”和“订单抬头”的基础上,加上打印“订单脚注”。此时,head->printOrder()调用执行printOrder()方法即可打印出:“订单抬头”“订单内容”“订单脚注”若order对象为NULL时,则只打印出“订单抬头”和“订单脚注”。入口函数main()中,先用new关键字创建Order类的对象,即对象指针order,并作为参数传递给PrintOrder的构造器进行创建PrintOrder对象,即对象指针print,之后print->printOrder()即调用PrintOrder中的printOrder()方法,执行主要打印逻辑。即:综上所述,空(1)和空(6)表示继承Order类,即:public Order;空(2)需要表示Decorator对象的order属性,即this->order或(*this).order;空(3)和空(4)需要显式调用父类Decorator的带参数构造器,参数为order,即Decorator(order);空(5) 处调用父类对象的printOrder()方法,即

相关推荐: