struct Visitor { };
struct Env { };
struct InappropriateFunction { };
class AbsTree {
public:
AbsTree();
virtual ~AbsTree() =0;
virtual void accept(Visitor &visitor) const = 0;
virtual void execute(Env &ctxt) const throw (InappropriateFunction);
};
class Operation: public AbsTree{
public:
Operation(char oper);
virtual ~Operation();
virtual void accept (Visitor &visitor) const;
char getOperator() const;
private:
char operator_;
};
AbsTree::AbsTree() {}
AbsTree::~AbsTree() {}
void AbsTree::accept(Visitor &visitor) const{}
void AbsTree::execute(Env &ctxt) const throw (InappropriateFunction) {}
Operation::Operation(char oper): operator_(oper) {}
Operation::~Operation(){}
void Operation::accept(Visitor &visitor) const{}
char Operation::getOperator() const {
return operator_;
}
int main()
{
Operation o('x');
Visitor my_visitor;
o.accept(my_visitor);
o.getOperator();
}
c3RydWN0IFZpc2l0b3IgeyB9OwpzdHJ1Y3QgRW52IHsgfTsKc3RydWN0IEluYXBwcm9wcmlhdGVGdW5jdGlvbiB7IH07CgpjbGFzcyBBYnNUcmVlIHsgCiAgIHB1YmxpYzoKICAgICAgIEFic1RyZWUoKTsKICAgICAgIHZpcnR1YWwgfkFic1RyZWUoKSA9MDsKICAgICAgIHZpcnR1YWwgdm9pZCBhY2NlcHQoVmlzaXRvciAmdmlzaXRvcikgY29uc3QgPSAwOwogICAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoRW52ICZjdHh0KSBjb25zdCB0aHJvdyAoSW5hcHByb3ByaWF0ZUZ1bmN0aW9uKTsKfTsKCmNsYXNzIE9wZXJhdGlvbjogcHVibGljIEFic1RyZWV7CiAgIHB1YmxpYzoKICAgICAgT3BlcmF0aW9uKGNoYXIgb3Blcik7CiAgICAgIHZpcnR1YWwgfk9wZXJhdGlvbigpOwogICAgICB2aXJ0dWFsIHZvaWQgYWNjZXB0IChWaXNpdG9yICZ2aXNpdG9yKSBjb25zdDsKICAgICAgY2hhciBnZXRPcGVyYXRvcigpIGNvbnN0OwogICBwcml2YXRlOgogICAgICBjaGFyIG9wZXJhdG9yXzsKfTsKCkFic1RyZWU6OkFic1RyZWUoKSB7fQpBYnNUcmVlOjp+QWJzVHJlZSgpIHt9CnZvaWQgQWJzVHJlZTo6YWNjZXB0KFZpc2l0b3IgJnZpc2l0b3IpIGNvbnN0e30Kdm9pZCBBYnNUcmVlOjpleGVjdXRlKEVudiAmY3R4dCkgY29uc3QgdGhyb3cgKEluYXBwcm9wcmlhdGVGdW5jdGlvbikge30KCk9wZXJhdGlvbjo6T3BlcmF0aW9uKGNoYXIgb3Blcik6IG9wZXJhdG9yXyhvcGVyKSB7fQpPcGVyYXRpb246On5PcGVyYXRpb24oKXt9CnZvaWQgT3BlcmF0aW9uOjphY2NlcHQoVmlzaXRvciAmdmlzaXRvcikgY29uc3R7fQpjaGFyIE9wZXJhdGlvbjo6Z2V0T3BlcmF0b3IoKSBjb25zdCB7CiAgIHJldHVybiBvcGVyYXRvcl87Cn0KCmludCBtYWluKCkKewogICAgT3BlcmF0aW9uIG8oJ3gnKTsKICAgIFZpc2l0b3IgbXlfdmlzaXRvcjsKICAgIG8uYWNjZXB0KG15X3Zpc2l0b3IpOwogICAgby5nZXRPcGVyYXRvcigpOwp9