#include<iostream>
#include<vector>
using namespace std;
class AbstractFile{
protected:
string name;
public:
AbstractFile(string name){
this->name = name;
}
AbstractFile(){
name = "XXX";
}
virtual void Print() = 0;
};
class File:public AbstractFile{
public:
File(string name):AbstractFile(name){
}
File(){
}
/*
函数作用:输出文件名
无参数
无返回值
*/
void Print(){
cout<<"File: "<<name<<endl;
}
};
class Folder:public AbstractFile{
private:
vector<AbstractFile *> vec;
public:
Folder(string name):AbstractFile(name){
}
Folder(){
}
/*
函数作用:将AbstractFile及其子类压入vector中
参数:指向AbstractFile的指针
无返回值
*/
void Add(AbstractFile *t){
vec.push_back(t);
}
/*
函数作用:遍历vector中的指针,调用Print()函数
无参数
无返回值
*/
void Do(){
vector<AbstractFile*> :: iterator it;
for(it=vec.begin(); it<vec.end(); it++)
(*it)->Print();
}
/*
函数作用:输出文件名
无参数
无返回值
*/
void Print(){
cout<<"Folder: "<<name<<endl;
}
};
int main(void)
{
Folder *root = new Folder("F:\\");
File *file1 = new File("1.c");
File *file2 = new File("2.c");
Folder *cf = new Folder("aa");
File *file3 = new File("3.c");
root->Add(file1);
root->Add(file2);
root->Add(cf);
cf->Add(file3);
root->Do();
}