#include using namespace std; class Player { protected: int v1; public: void makeMove(int p1) { cout << "Player::makeMove() p1: " << p1 << ", v1: " << v1 << endl; } virtual void determineMove() { cout << "Player::determineMove()" << endl; makeMove(1); } void setV1(int p) { v1 = p; } }; class UserPlayer: public Player { protected: int v2; public: virtual void determineMove() { cout << "UserPlayer::determineMove() v2: " << v2 << endl; makeMove(2); } void setV2 (int p) { v2 = p; } }; void takeTurn (Player p) { p.determineMove(); } void takeTurn2 (Player *p) { p->determineMove(); } int main () { Player p1; UserPlayer p2; p1.setV1(11); p2.setV1(12); p2.setV2(13); p1.determineMove(); p2.determineMove(); takeTurn (p1); takeTurn (p2); cout << endl << "Now using pointers to classes" << endl; Player* pp1 = new Player; Player* pp2 = new UserPlayer; pp1->setV1(21); pp2->setV1(22); // pp2->setV2(23); pp1->determineMove(); pp2->determineMove(); takeTurn2(pp1); takeTurn2(pp2); cout << endl << "Now using pointers to classes by getting the address" << endl; p1.determineMove(); p2.determineMove(); takeTurn2(pp1); takeTurn2(pp2); }