1class File 2{ 3public: 4 File(std::string n) 5 :name(n) 6 {} 7virtual ~File( ){} 8virtualvoid Add(File *s){} 9virtualint Remove(int n){} 10virtual File* getChild(int n){}; 11virtualvoid Operation( )=0; 12protected: 13 std::string name; 14}; 15 16class Leaf:public File 17{ 18public: 19 Leaf(std::string n) 20 :File(n) 21 { } 22void Operation( ); 23}; 24void Leaf::Operation( ) 25{ 26 std::cout<<"The leaf is "<<name<<std::endl; 27} 28 29class subFile:public File 30{ 31public: 32 subFile(std::string n) 33 :name(n) 34 {} 35 ~subFile( ); 36void Add(File *s); 37int Remove(int n); 38 File * getChild(int n); 39void Operation( ); 40private: 41 std::vector<File*> listFile; 42}; 43 subFile::~subFile( ) 44{ 45} 46void subFile::Add(File *s) 47{ 48 listFile.push_back(s); 49} 50int subFile::Remove(int n) 51{ 52if(n>listFile.size( )||n<0) 53return -1; 54 listFile.erase(listFile.begin( )+n); 55return1; 56} 57 File* subFile::getChild(int n) 58{ 59if(n>listFile.size( )||n<0) 60return NULL; 61return listFile[n]; 62} 63void subFile::Operation( ) 64{ 65 std::vector<File*>::iterator iter=listFile.begin( ); 66while( iter!=listFile.end( ) ) 67 { 68//否则编译器会报错 69 std::cout<<"This document is "<<name<<std::endl; 70 (*iter)-> Operation( ); 71 iter++; 72 } 73} 74 75int main(int argc,char **argv) 76{ 77 File* f1=new subFile("Work"); 78 File* f2=new subFile("Daily Recond"); 79 File* f3=new subFile("Key Document); 80 File* f4=new Leaf("Address Book"); 81 File* f5=new Leaf("Schedule"); 82 f1->Add(f2); 83 f1->Add(f3); 84 f1->Add(f4); 85 f1->Add(f5); 86 File* f6=new Leaf("2012-12-18"); 87 File* f7=new Leaf("2012-12-19"); 88 f2->Add(f6); 89 f2->Add(f7); 90 File* f8=new Leaf("Meeting Document"); 91 f3->Add(f8); 92 f1->Operation( ); 93 delete f1; 94 delete f2; 95 delete f3; 96 delete f4; 97 delete f5; 98 delete f6; 99 delete f7;100 delete f8;101return0;102 }