// Rule.h and .cpp //////////////////////////////////////// #pragma once class Rule { public: Rule(void); public: ~Rule(void); }; #include "Rule.h" Rule::Rule(void) { } Rule::~Rule(void) { } //////////////////////////// // Move.h and .cpp //////////////////////////////// #pragma once #include "rule.h" #include "Tank.h" class Move : public Rule { public: Move(void); void moveTank(Tank *t); public: ~Move(void); }; #include "Move.h" Move::Move(void) { } Move::~Move(void) { } void Move::moveTank(Tank *t) { t->position = 20; } ///////////////////////////// // Tank.h and .cpp ///////////////////////////// #pragma once #include "Rule.h" class Tank { public: Tank(void); int position; void customRule(Rule *r); public: ~Tank(void); }; #include "Tank.h" Tank::Tank(void) { } Tank::~Tank(void) { } void Tank::customRule(Rule *r) { r->moveTank(this); }