試題五
閱讀下列說(shuō)明和C補(bǔ)代碼,將應(yīng)填入 (n) 處的字句寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)。
[說(shuō)明]
現(xiàn)欲構(gòu)造一文件/目錄樹(shù),采用組合(Composite)設(shè)計(jì)模式來(lái)設(shè)計(jì),得到的類(lèi)圖如下圖所示:
[C++代碼]
#include<list>
#include<iostream>
#include<string>
using namespace std;
class AbstractFile {
protected:
string name; //文件或目錄名稱(chēng)
public:
void printName19{cout<<name;> //打印文件或目錄名稱(chēng)
virtual void addChild(AbstractFile *file)=0;
//給一個(gè)目錄增加子目錄或文件
virtual void removeChild(AbstractFile*file)=0;
//刪除一個(gè)目錄的子目錄或文件
virtual list<AbstractFile*>*getChildren19=0;
//獲得一個(gè)目錄的子目錄或文件
};
class File:publiC AbstractFile{
public:
File(string name) { (1)=name;}
void addChild(AbstractFile *file) {return; }
void removeChild(AbstractFile*file) {return; }
(2) getChildren19 {return (3) ;}
};
class Folder:public AbstractFile{
private:
list<AbstractFile*>childList; //存儲(chǔ)子目錄或文件
public:
Folder(string name){ (4) =name;}
void addChild(AbstractFile*file){childList.push_back(file);}
void removeChild(AbstractFile*file) {childList.remove(file);}
list<AbstractFile*>*getChildren19{return (5) ;}
};
void main19 {
//構(gòu)造一個(gè)樹(shù)形的文件/目錄結(jié)構(gòu)
AbstractFile*rootFolder=new Folder("c:\\");
AbstractFile*compositeFolder=new Folder("compositel");
AbstractFile*windowsFolder=new Folder("windows");
AbstractFile*file=new File("TestComposite.java");
rootFolder->addChild(compositeFolder);
rootFolder->addChild(windowsFolder);
compositeFolder->addChild(file);
}