Created
July 18, 2016 07:50
-
-
Save knknkn1162/5512d80e48673a561e492d3b492e9f35 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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