// -*- mode: c++ -*- // $Id: methcall.g++,v 1.8 2001/10/09 23:53:03 doug Exp $ // http://www.bagley.org/~doug/shootout/ // with some help from Bill Lear #include #include using namespace std; class Toggle { public: Toggle(bool start_state) : state(start_state) { } virtual ~Toggle() { } bool value() { return(state); } virtual Toggle& activate() { state = !state; return(*this); } bool state; }; class NthToggle : public Toggle { public: NthToggle(bool start_state, int max_counter) : Toggle(start_state), count_max(max_counter), counter(0) { } Toggle& activate() { if (++this->counter >= this->count_max) { state = !state; counter = 0; } return(*this); } private: int count_max; int counter; }; int main(int argc, char *argv[]) { int n = ((argc == 2) ? atoi(argv[1]) : 1); bool val = true; Toggle *toggle = new Toggle(val); for (int i=0; iactivate().value(); } cout << ((val) ? "true" : "false") << endl; delete toggle; val = true; NthToggle *ntoggle = new NthToggle(val, 3); for (int i=0; iactivate().value(); } cout << ((val) ? "true" : "false") << endl; delete ntoggle; return 0; }