Skip to content

Instantly share code, notes, and snippets.

@knknkn1162
Created July 18, 2016 07:50
Show Gist options
  • Save knknkn1162/5512d80e48673a561e492d3b492e9f35 to your computer and use it in GitHub Desktop.
Save knknkn1162/5512d80e48673a561e492d3b492e9f35 to your computer and use it in GitHub Desktop.
class IVisitor
{
public:
virtual ~IVisitor() {}
virtual void visit(Circle& node) = 0;
virtual void visit(Triangle& node) = 0;
};
class Shape
{
private:
public:
explicit Shape() {}
virtual ~Shape() {}
virtual void accept(IVisitor& visitor) = 0;
};
class Circle : public Shape
{
private:
double radius;
public:
explicit Circle(double radius) : radius(radius) {}
//ダブルディスパッチ
//overrideによる動的なディスパッチ
void accept(IVisitor& visitor) override
{
//引数の型は静的に決まるため、sを主語に移動してoverrideによる動的なディスパッチを実現する
visitor.visit(*this);
}
double getRadius() { return radius; }
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment