64,646
社区成员
发帖
与我相关
我的任务
分享
#include <vector>
#include <iostream> // std::cout
#include <memory> // std::auto_ptr
#include <algorithm> // std::for_each
#include <functional> // std::mem_fun
using namespace std;
class Graphic //class component
{
public:
virtual void print() const = 0;
virtual ~Graphic() {}
};
class Ellipse : public Graphic // class Leaf
{
public:
void print() const {
cout << "Ellipse \n";
}
};
class CompositeGraphic : public Graphic // class composite conclude a vector of pointer of componet
{
public:
void print() const {
// for each element in graphicList_, call the print member function
for_each(graphicList_.begin(), graphicList_.end(), mem_fun(&Graphic::print));
}
void add(Graphic *aGraphic) {
graphicList_.push_back(aGraphic);
}
private:
vector<Graphic*> graphicList_;
};
int main()
{
// Initialize four ellipses
const auto_ptr<Ellipse> ellipse1(new Ellipse());
const auto_ptr<Ellipse> ellipse2(new Ellipse());
const auto_ptr<Ellipse> ellipse3(new Ellipse());
const auto_ptr<Ellipse> ellipse4(new Ellipse());
// Initialize three composite graphics
const auto_ptr<CompositeGraphic> graphic(new CompositeGraphic());
const auto_ptr<CompositeGraphic> graphic1(new CompositeGraphic());
const auto_ptr<CompositeGraphic> graphic2(new CompositeGraphic());
// Composes the graphics
graphic1->add(ellipse1.get() );
graphic1->add(ellipse2.get() );
graphic1->add(ellipse3.get() );
graphic2->add(ellipse4.get());
graphic->add(graphic1.get());
graphic->add(graphic2.get());
// Prints the complete graphic (four times the string "Ellipse")
graphic->print();
return 0;
}
graphic1->add(ellipse1.get() );
graphic1->add(ellipse2.get() );
graphic1->add(ellipse3.get() );
graphic2->add(ellipse4.get());
graphic->add(graphic1.get());
graphic->add(graphic2.get());
你再仔细体会一下这段代码,graphic1和graphic2中分别有多少个对象,自己再想想