列表

详情


阅读下列说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
现欲开发一个软件系统,要求能够同时支持多种不同的数据库,为此采用抽象工厂模式设计该系统。以SQL Server和Access两种数据库以及系统中的数据库表Department为例,其类图如图5-1所示。

图5-1 类图

【C++代码】
#include
using namespace std;
 
class Department{/*代码省略*/};
class IDepartment{
public:
    (1)    =0;
    (2)    =0;
};
 
class SqlserverDepartment:(3){
public:
  void Insert(Department* department){
   cout <<"Insert a record into Department in SQL Server!\n";
∥其余代码省略
    }
    Department GetDepartment(int id){
   /*代码省略*/
    }
};
 
class AccessDepartment: (4) {
public:
    void Insert(Department* department){
   cout <<"Insert a record into Department in ACCESS!\n";
       ∥其余代码省略
    }
    Department GetDepartment(int id){
   /*代码省略*/
    }
};
   
(5){
public:
    (6)=0;
};
class SqlServerFactory:public IFactory{
public:
    IDepartment*CreateDepartment(){  return new SqlserverDepartment();  }
    ∥其余代码省略
};
 
class AccessFactory:public IFactory{
public:
    IDepartment* CreateDepartment(){  return new AccessDepartment();}
    ∥其余代码省略
};

参考答案:

(1)  virtual void Insert(Departmet* department)
(2)  virtual Department GetDepartment(int id)
(3)  public IDepartment
(4)  public IDepartment
(5)  class IFactory
(6)  virtual IDepartment* CreateDepartment()
 

详细解析:

本题考查基本面向对象设计模式的运用能力。
抽象工厂设计模式主要是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。从题目给出的类图可知SqlserverDepartment和AccessDepartment继承于Idepartment。而从第(1)和第(2)空处的程序语句可以知道,这里是定义纯虚函数,而类Idepartment一个抽象类,而在这里需要定义一个什么样的纯虚函数,就需要根据SqlserverDepartment和AccessDepartment类的内容来了解。在这两个类里面都有Insert和GetDepartment这两个函数,因此在Idepartment类中定义的纯虚函数就是这两个函数,因此第(1)空应该填virtual void Insert(Departmet* department),而第(2)空应该填virtual Department GetDepartment(int id)。
第(3)空和第(4)空是一样的,因为类SqlserverDepartment和AccessDepartment都是继承抽象类Idepartment,而一般情况下的继承方式都是public,所以这两空的答案都是public Idepartment。
从第(5)空出现的位置,不难知道这里是定义一个类,结合前后程序,可以知道这里定义的类是IFactory,这是一个抽象类,因此该空的答案为class IFactory。
第(6)空是定义抽象类Ifactory的纯虚函数,从后面的程序可以看出,需要定义的纯虚函数是CreateDepartment,因此第(6)空的答案是virtual IDepartment* CreateDepartment()。

上一题