0
点赞
收藏
分享

微信扫一扫

走在架构师边上的边上


走在架构师边上的边上_jpa

跟妹子聊天到深夜两点,实在不敢肝了。

这里分享海纳老师的《自己动手写python虚拟机》的一段访问者设计模式代码给大家。

我在qt的命令行应用上测试可行。

走在架构师边上的边上_laravel_02

代码如下:

#include <QCoreApplication>
#include<string>
#include <iostream>


using namespace std;


class Visitor;
class Animal {
public:
virtual void accept(Visitor *v) {cout <<"emmm.."<<endl;}
};


class Dog:public Animal{
public:
virtual void accept(Visitor *v);
};


class Cat:public Animal{
public:
virtual void accept(Visitor *v);
};


class Fox:public Animal{
public:
virtual void accept(Visitor *v);
};


class Visitor{
public:
void visit(Animal * animal){};
virtual void visit(Dog * animal){};
virtual void visit(Cat * animal){};
virtual void visit(Fox * animal){};
};


class Speaker:public Visitor{
public:
void visit(Animal * pa){
pa->accept(this);
}


virtual void visit(Dog *pd) {
cout <<"wang"<<endl;
}


virtual void visit(Cat *pc) {
cout <<"miao"<<endl;
}


virtual void visit(Fox *pf) {
cout <<"woo"<<endl;
}
};


class Feeding:public Visitor{
public:
void visit(Animal * pa){
pa->accept(this);
}


virtual void visit(Dog *pd) {
cout <<"bone"<<endl;
}


virtual void visit(Cat *pc) {
cout <<"fish"<<endl;
}


virtual void visit(Fox *pf) {
cout <<"meat"<<endl;
}
};


void Dog::accept(Visitor *v){
v->visit(this);
}


void Cat::accept(Visitor *v){
v->visit(this);
}


void Fox::accept(Visitor *v){
v->visit(this);
}




int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);


Animal * animals[] = {new Dog(), new Cat(), new Fox()};


Speaker s;


for(uint i = 0; i < sizeof(animals) / sizeof(Animal*); i++)
{
s.visit(animals[i]);
}


Feeding f;


for(uint i = 0; i < sizeof(animals) / sizeof(Animal*); i++)
{
f.visit(animals[i]);
}


return a.exec();
}




举报

相关推荐

0 条评论