/////////////////////////////////////////////////////// // // overloading.cpp // // Started 1/16/97 by Jeff Ondich // Last modified: 1/16/97 // // 1. Read the program. What's it going to do // as it stands? // // 2. Eliminate the one-parameter version of // MessWithNumber() (both the interface and // the implementation), and uncomment line A. // What should happen now? Try it. // // 3. Get rid of the zero-parameter MessWithNumber() // and the two-parameter MessWithNumber(), // get rid of line A, and uncomment line B. What // happens now? // // 4. You've now seen "overloading" of a function // (one function name, three actual functions // with different parameter lists). You've // also seen a way to fuse several overloaded // functions into one using "default parameters." // Now, finally, try uncommenting line C. What // does the compiler complain about? Why do // you think it complains? // //////////////////////////////////////////////////////// #include /////////////////////////////////////////////////////// // This DopeyClass has just the one constructor // and no destructor. But it does have an // overloaded member function. /////////////////////////////////////////////////////// class DopeyClass { private: int mNumber; public: DopeyClass( void ); int GetNumber( void ); void SetNumber( int N ); void SquareNumber( void ); void MessWithNumber( void ); void MessWithNumber( int N ); void MessWithNumber( int N, int M ); // void MessWithNumber( int N, int M=6 ); // Line A // void MessWithNumber( int N=3, int M=6 ); // Line B // void MessWithNumber( int N=3, int M ); // Line C }; /////////////////////////////////////////////////////// // The next four function definitions constitute the // implementation of DopeyClass. /////////////////////////////////////////////////////// DopeyClass::DopeyClass( void ) { mNumber = 0; } int DopeyClass::GetNumber( void ) { return( mNumber ); } void DopeyClass::SetNumber( int N ) { mNumber = N; } void DopeyClass::SquareNumber( void ) { mNumber = mNumber * mNumber; } void DopeyClass::MessWithNumber( void ) { mNumber = mNumber * 3 - 6; } void DopeyClass::MessWithNumber( int N ) { mNumber = mNumber * N - 6; } void DopeyClass::MessWithNumber( int N, int M ) { mNumber = mNumber * N - M; } /////////////////////////////////////////////////////// // The main program /////////////////////////////////////////////////////// int main( void ) { DopeyClass myDopeyObject; // Test I. myDopeyObject.SetNumber( 5 ); myDopeyObject.MessWithNumber(); cout << "I. " << myDopeyObject.GetNumber() << endl; // Test II. myDopeyObject.SetNumber( 5 ); myDopeyObject.MessWithNumber( 1 ); cout << "II. " << myDopeyObject.GetNumber() << endl; // Test III. myDopeyObject.SetNumber( 5 ); myDopeyObject.MessWithNumber( 7, 8 ); cout << "III. " << myDopeyObject.GetNumber() << endl; return( 0 ); }