//: C04:ProgValTest.cpp // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt //{L} ProgVals #include "ProgVals.h" using namespace std; string defaults[][2] = { { "color", "red" }, { "size", "medium" }, { "shape", "rectangular" }, { "action", "hopping"}, }; const char* usage = "usage:\n" "ProgValTest [flag1=val1 flag2=val2 ...]\n" "(Note no space around '=')\n" "Where the flags can be any of: \n" "color, size, shape, action \n"; // So it can be used globally: ProgVals pvals(defaults, sizeof defaults / sizeof *defaults); class Animal { string color, size, shape, action; public: Animal(string col, string sz, string shp, string act) :color(col),size(sz),shape(shp),action(act){} // Default constructor uses program default // values, possibly change on command line: Animal() : color(pvals["color"]), size(pvals["size"]), shape(pvals["shape"]), action(pvals["action"]) {} void print() { cout << "color = " << color << endl << "size = " << size << endl << "shape = " << shape << endl << "action = " << action << endl; } // And of course pvals can be used anywhere // else you'd like. }; int main(int argc, char* argv[]) { // Initialize and parse command line values // before any code that uses pvals is called: pvals.parse(argc, argv, usage); pvals.print(); Animal a; cout << "Animal a values:" << endl; a.print(); } ///:~