From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- Bachelor/Prog1/examples/ch08/Fig08_03/Fig08_03.cpp | 89 ++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 Bachelor/Prog1/examples/ch08/Fig08_03/Fig08_03.cpp (limited to 'Bachelor/Prog1/examples/ch08/Fig08_03/Fig08_03.cpp') diff --git a/Bachelor/Prog1/examples/ch08/Fig08_03/Fig08_03.cpp b/Bachelor/Prog1/examples/ch08/Fig08_03/Fig08_03.cpp new file mode 100644 index 0000000..ac5e434 --- /dev/null +++ b/Bachelor/Prog1/examples/ch08/Fig08_03/Fig08_03.cpp @@ -0,0 +1,89 @@ +// Fig. 8.3: fig08_03.cpp +// Overloading the stream-insertion and +// stream-extraction operators. +#include + +using std::cout; +using std::cin; +using std::endl; +using std::ostream; +using std::istream; + +#include + +using std::setw; + +// PhoneNumber class definition +class PhoneNumber { + friend ostream &operator<<( ostream&, const PhoneNumber & ); + friend istream &operator>>( istream&, PhoneNumber & ); + +private: + char areaCode[ 4 ]; // 3-digit area code and null + char exchange[ 4 ]; // 3-digit exchange and null + char line[ 5 ]; // 4-digit line and null + +}; // end class PhoneNumber + +// overloaded stream-insertion operator; cannot be +// a member function if we would like to invoke it with +// cout << somePhoneNumber; +ostream &operator<<( ostream &output, const PhoneNumber &num ) +{ + output << "(" << num.areaCode << ") " + << num.exchange << "-" << num.line; + + return output; // enables cout << a << b << c; + +} // end function operator<< + +// overloaded stream-extraction operator; cannot be +// a member function if we would like to invoke it with +// cin >> somePhoneNumber; +istream &operator>>( istream &input, PhoneNumber &num ) +{ + input.ignore(); // skip ( + input >> setw( 4 ) >> num.areaCode; // input area code + input.ignore( 2 ); // skip ) and space + input >> setw( 4 ) >> num.exchange; // input exchange + input.ignore(); // skip dash (-) + input >> setw( 5 ) >> num.line; // input line + + return input; // enables cin >> a >> b >> c; + +} // end function operator>> + +int main() +{ + PhoneNumber phone; // create object phone + + cout << "Enter phone number in the form (123) 456-7890:\n"; + + // cin >> phone invokes operator>> by implicitly issuing + // the non-member function call operator>>( cin, phone ) + cin >> phone; + + cout << "The phone number entered was: "; + + // cout << phone invokes operator<< by implicitly issuing + // the non-member function call operator<<( cout, phone ) + cout << phone << endl; + + return 0; + +} // end main + +/************************************************************************** + * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and Prentice * + * Hall. All Rights Reserved. * + * * + * DISCLAIMER: The authors and publisher of this book have used their * + * best efforts in preparing the book. These efforts include the * + * development, research, and testing of the theories and programs * + * to determine their effectiveness. The authors and publisher make * + * no warranty of any kind, expressed or implied, with regard to these * + * programs or to the documentation contained in these books. The authors * + * and publisher shall not be liable in any event for incidental or * + * consequential damages in connection with, or arising out of, the * + * furnishing, performance, or use of these programs. * + *************************************************************************/ -- cgit v1.2.3