阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如下表所示。

admin2018-07-23  8

问题 阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如下表所示。

    为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如题图5-1所示。

    其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;类FlyBehavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。请填补以下代码中的空缺。
【C++代码】
#include<iostream>
using namespace_____(1);
class  FlyBehaVior{
public:____(2) fly()=0;
};
class QuackBehavior{
public:____(3) quack()=0;
};
class  FlyWithWings:public FlyBehavior{
    public:void fly(){cout<<’’使用翅膀飞行!’’<<end1;}
};
class FlyNoWay:public FlyBehavior {
    public:void fly(){cout<<’’不能飞行!’’<<end1;}
};
class Quack:public QuackBehaVior {
    public:void quack(){cout<<’’发出\’嘎嘎’\声!’’<<end1;}
  };
  class  Squeak:publiC QuackBehavior{
    public:void quack(){cout<<’’发出空气与橡皮摩擦声!’’<<end1;}
  };
  class QuackNoWay:public QuackBehavior {
    public:void quack(){cout<<’’不能发声!’’<<end1;}
};
Class Duck {
protected:
    FlyBehavior *_____(4);
    QuackBehaVior  *_____(5);
public:
void fly() _____(6);}
void quack() { _____(7);};
virtual void display()=0;
};
clasS RubberDuck:public Duck(
public:
    RubberDuCk() {
    flyBehaVior=new_____(8);
    quackBehavior=new_____(9);
    }
    ~RubberDuck() {
    if(!flyBehavior)delete flyBehavior;
    if  (!quackBehaVior)delete quackBehavior;
    }
    void display(){/*此处省略显示橡皮鸭的代码*/}
};
//其他代码省略

选项

答案(1)std (2)Virtual void (3)Virtual void (4)flyBehavior (5)quackBehaVior (6)flyBehavior->fly() (7)quackBehavior->quack() (8)FlyNoWay() (9)Squealk()

解析 本题考查面向对象的程序设计的抽象类和多态。程序解释如下。
    (1)using namespace(1)std;    /*所谓namespace,是指标识符的各种可见范围。c++标准程序库中的所有标识符都被定义于一个名为std的namespace中。*/
    (2)由题中信息可知,类FlyBehavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为,而这两种行为对应的不止是一种方式,为了表示多种行为方式(即多态),需要定义虚函数,用以给子类进行重载。再由子类中的函数void fly()及void quack()可知,父类中的对应函数返回值也应为void。所以空(2)处和空(3)处的填空如下:
    class FlyBehavior{
    public:(2)virtual viod fly()=0;
    };
    class QuackBehavior{
    public:(3) virtual void quack()=0;
    }
    (3)Duck类的定义,由子类RubberDuck类中出现的“flyBehavior=new(8);quackBehavior=new (9);”可知这两个指针类型对象为flyBehavior和quackBehavior。所以空(4)处和空(5)处填空如下:
    Class Duck{
    protected:
    FlyBehavior *(4)flyBehavior;
    QuackBehavior* (5)quackBehavior;
    由“FlyBehavior*flyBehavior;QuackBehavior*quackBehavior;”及函数名可知,该函数体应调用FlyBehavior类中的fly函数和QuackBehavior类中的quack函数。所以空(6)处和空(7)处填空如下:
    public:
    void fly(){  (6)flyBehavior->fly();  }
    void quack(){  (7)quackBehavior->quack;};
    virtual void display()=0;
    };
    (4)由题中所给信息可知RubberDuck是“发出橡皮与空气摩擦声”并且“不能飞行”的鸭子种类,因此构造函数中创建的对象flyBehavior和quackBehavior对应的类型分别为FlyNoWay和Squeak。所以空(8)处和空(9)处的填空如下:
    class RubberDuck:public Duck{
    public:
    RubberDuck() {
    flyBehavior=new(8)FlyNoWay();
    quackBehaVior=neW(9)Squeak();
    }
转载请注明原文地址:https://kaotiyun.com/show/gKDZ777K
0

相关试题推荐
最新回复(0)