// Listing 14.8 passing pointers to functions as function arguments // using typedef to avoid messy syntax #include using namespace std; typedef void (*MATT) (int&, int&); void square(int &, int &); void cube(int &, int &); void swap(int &, int &); void getVals(int &, int &); //void printVals(void (*)(int &, int &), int &, int &); // a little messy void printVals(MATT, int&, int&); int main() { int valOne = 1; int valTwo = 2; int choice = 0; bool fQuit = false; //void (*pFunc)(int &, int &); MATT pFunc; while (!fQuit) { cout << "(0)quit (1)change values (2)square (3)cube (4)swap: "; cin >> choice; switch (choice) { case 1: pFunc = getVals; break; case 2: pFunc = square; break; case 3: pFunc = cube; break; case 4: pFunc = swap; break; default: fQuit = true; break; } if (fQuit) { break; } printVals(pFunc, valOne, valTwo); } return 0; } //void printVals( void (*pFunc)(int &, int &),int &x, int &y) void printVals(MATT pFunc, int &x, int &y) { cout << "x: " << x << " y: " << y << endl; pFunc(x,y); cout << "x: " << x << " y: " << y << endl; } void square (int & rX, int & rY) { rX *= rX; rY *= rY; } void cube (int & rX, int & rY) { int tmp; tmp = rX; rX *= rX; rX = rX * tmp; tmp = rY; rY *= rY; rY = rY * tmp; } void swap(int & rX, int & rY) { int temp; temp = rX; rX = rY; rY = temp; } void getVals (int & rValOne, int & rValTwo) { cout << "New value for ValOne: "; cin >> rValOne; cout << "New value for ValTwo: "; cin >> rValTwo; }