goback add

Éè¼ÆÄ£Ê½Ñ§Ï°-----×éºÏģʽ

5195 µã»÷¡¤0 »ØÌû
µÆ»ð»¥Áª
Â¥Ö÷

×éºÏģʽ


¡¡¡¡¡¡GOOD£ºÕûÌåºÍ²¿·Ö¿ÉÒÔ±»Ò»Ö¶Դý£¨ÈçWORDÖи´ÖÆÒ»¸öÎÄ×Ö¡¢Ò»¶ÎÎÄ×Ö¡¢Ò»ÆªÎÄÕ¶¼ÊÇÒ»ÑùµÄ²Ù×÷£©





[html]
#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Component
{
public:
   string m_strName;
   Component(string strName)
   {
       m_strName = strName;
   }
   virtual void Add(Component* com)=0;
   virtual void Display(int nDepth)=0;
};

class Leaf : public Component
{
public:
   Leaf(string strName): Component(strName){}

   virtual void Add(Component* com)
   {
       cout<<"leaf can't add"<<endl;
   }

   virtual void Display(int nDepth)
   {
       string strtemp;
       for(int i=0; i < nDepth; i++)
       {
           strtemp+="-";
       }
       strtemp += m_strName;
       cout<<strtemp<<endl;
   }
};

class Composite : public Component
{
private:
   vector<Component*> m_component;
public:
   Composite(string strName) : Component(strName){}

   virtual void Add(Component* com)
   {
       m_component.push_back(com);
   }

   virtual void Display(int nDepth)
   {
       string strtemp;
       for(int i=0; i < nDepth; i++)
       {
           strtemp+="-";
       }
       strtemp += m_strName;
       cout<<strtemp<<endl;

       vector<Component*>::iterator p=m_component.begin();
       while (p!=m_component.end())
       {
           (*p)->Display(nDepth+2);  
           p++;
       }
   }

};

//¿Í»§¶Ë
int main()
{
   Composite* p=new Composite("СÍõ");
   p->Add(new Leaf("СÀî"));
   p->Add(new Leaf("СÕÔ"));

   Composite* p1 = new Composite("ССÎå");
   p1->Add(new Leaf("´óÈý"));

   p->Add(p1);
   p->Display(1);
   return 0;
}




[html]
#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Company
{
protected:
   string m_strName;
public:
   Company(string strName)
   {
       m_strName = strName;
   }

   virtual void Add(Company* c)=0;
   virtual void Display(int nDepth)=0;
   virtual void LineOfDuty()=0;
};

class ConcreteCompany: public Company
{
private:
   vector<Company*> m_company;
public:
   ConcreteCompany(string strName):Company(strName){}

   virtual void Add(Company* c)
   {
       m_company.push_back(c);
   }
   virtual void Display(int nDepth)
   {
       string strtemp;
       for(int i=0; i < nDepth; i++)
       {
           strtemp += "-";
       }
       strtemp +=m_strName;
       cout<<strtemp<<endl;

       vector<Company*>::iterator p=m_company.begin();
       while (p!=m_company.end())
       {
           (*p)->Display(nDepth+2);
           p++;
       }
   }
   virtual void LineOfDuty()
   {
       vector<Company*>::iterator p=m_company.begin();
       while (p!=m_company.end())
       {
           (*p)->LineOfDuty();
           p++;
       }
   }
};

class HrDepartment : public Company
{
public:

   HrDepartment(string strname) : Company(strname){}

   virtual void Display(int nDepth)
   {
       string strtemp;
       for(int i = 0; i < nDepth; i++)
       {
           strtemp += "-";
       }

       strtemp += m_strName;
       cout<<strtemp<<endl;
   }
   virtual void Add(Company* c)
   {
       cout<<"error"<<endl;
   }

   virtual void LineOfDuty()
   {
       cout<<m_strName<<":ÕÐÆ¸È˲Å"<<endl;
   }
};

//¿Í»§¶Ë£º
int main()
{    www.atcpu.com
   ConcreteCompany *p = new ConcreteCompany("Ç廪´óѧ");
   p->Add(new HrDepartment("Ç廪´óѧÈ˲Ų¿"));

   ConcreteCompany *p1 = new ConcreteCompany("Êýѧϵ");
   p1->Add(new HrDepartment("ÊýѧϵÈ˲Ų¿"));

   ConcreteCompany *p2 = new ConcreteCompany("ÎïÀíϵ");
   p2->Add(new HrDepartment("ÎïÀíϵÈ˲Ų¿"));

   p->Add(p1);
   p->Add(p2);

   p->Display(1);
   p->LineOfDuty();
   return 0;
}

ϲ»¶0 ÆÀ·Ö0