c++ visitor設計模式:關於訪問者模式,語言表達總是太繞,不如一個具體的實現:
#include#include #include #include using std::cout; using std::endl; //前向聲明,訪問者 class Visitor; //被訪問的抽象類,只有一個接口,用來接受訪問者 class Object { public: virtual void accept(Visitor&v) = 0; }; //具體的被訪問的對象,學生。 class StudentA :public Object { std::string name; int score; public: StudentA(std::string name_); int getScore(); std::string getName() { return name; } void setScore(int num); virtual void accept(Visitor&v); }; //抽象訪問者,只有一個接口,訪問. class Visitor { public: virtual void visit(Object* obj)=0; }; //具體的訪問者一,班主任,實現訪問(學生並給學分) class ClassLeader :public Visitor { public: virtual void visit(Object* obj); }; //具體的訪問者二,校長,實現訪問(學生並批評不及格的學生) class HeadMaster :public Visitor { public: virtual void visit(Object* obj); }; //隨機分數生成器 class ScoreGen { public: static int getScore() { auto tp=std::chrono::system_clock().now(); auto d=tp.time_since_epoch(); int score_temp = d.count() % 100; return score_temp; } }; int main() { std::vector