diff options
Diffstat (limited to 'Bachelor/Prog1/examples/ch08/Fig08_03/Fig08_03.cpp')
| -rw-r--r-- | Bachelor/Prog1/examples/ch08/Fig08_03/Fig08_03.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
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 <iostream>
+
+using std::cout;
+using std::cin;
+using std::endl;
+using std::ostream;
+using std::istream;
+
+#include <iomanip>
+
+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. *
+ *************************************************************************/
|
