1 / 53

Object-Oriented Programming Using C++

Object-Oriented Programming Using C++. CLASS 17. Objectives. Change a type specific Array class to a template. #include <iostream.h> template <class T> class Array { friend ostream &operator<< (ostream &, const Array &); friend istream &operator>> (istream &, Array &);.

Télécharger la présentation

Object-Oriented Programming Using C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Object-Oriented Programming Using C++ CLASS 17

  2. Objectives • Change a type specific Array class to a template

  3. #include <iostream.h> template <class T> class Array { friend ostream &operator<< (ostream &, const Array &); friend istream &operator>> (istream &, Array &); Fig. 8.4, Pg. 474

  4. #include <iostream.h> template <class T> class Array { friend ostream &operator<< (ostream &, const Array<T> &); friend istream &operator>> (istream &, Array<T> &); Fig. 8.4, Pg. 474

  5. public: Array(int = 10); Array(const Array&); ~Array( ); int getSize( ) const; const Array &operator=(const Array &); bool operator= = ( const Array & ) const; bool operator!= ( const Array &right) const { return ! ( *this == right ); } int & operator[ ] ( int ); const int &operator[ ] ( int ) const; static int getArrayCount ( ); Fig. 8.4, Pg. 474

  6. public: Array(int = 10); Array(const Array<T> &); ~Array( ); int getSize( ) const; const Array<T> &operator= (const Array<T> &); bool operator==(const Array<T> &right) const; bool operator! =(const Array<T> &) const; { return ! ( *this == right ); } T &operator[]( int ); const T &operator[] ( int ) const; static int getArrayCount( ); Fig. 8.4, Pg. 474

  7. private: int *ptr; int size; static int arrayCount; }; Fig. 8.4, Pg. 474

  8. private: T *ptr; int size; static int arrayCount; }; Fig. 8.4, Pg. 474

  9. // Initialize static data member at file scope int Array::arrayCount = 0; Fig. 8.4, Pg. 475

  10. // Initialize static data member at file scope int Array<T>::arrayCount = 0; Fig. 8.4, Pg. 475

  11. Array::Array(int arraySize) { size = ( arraySize > 0 ? arraySize : 10); ptr = new int[ size ]; assert( ptr ! = 0 ); ++arrayCount; for ( int i - 0; i < size; i++ ) ptr[ i ] = 0; } Fig. 8.4, Pg. 475

  12. Array<T>::Array(int arraySize) { size = ( arraySize > 0 ? arraySize : 10); ptr = new T [ size ]; assert( ptr ! = 0 ); ++arrayCount; for ( int i - 0; i < size; i++ ) ptr[ i ] = 0; } Fig. 8.4, Pg. 475

  13. Array::Array(const Array &init):size( init.size) { ptr = new int[ size ]; assert( ptr != 0 ); ++arrayCount; for ( int i = 0; i < size; i++ ) ptr[ i ] = init.ptr[ i ]; } Fig. 8.4, Pg. 475

  14. Array<T>::Array(const Array <T>&init):size( init.size) { ptr = new T[ size ]; assert( ptr != 0 ); ++arrayCount; for ( int i = 0; i < size; i++ ) ptr[ i ] = init.ptr[ i ]; } Fig. 8.4, Pg. 475

  15. Array::~Array( ) { --arrayCount; delete [ ] ptr; } // Get the size of the array int Array::getSize( ) const { return size; } Fig. 8.4, Pg. 475

  16. Array<T>::~Array( ) { --arrayCount; delete [ ] ptr; } // Get the size of the array int Array<T>::getSize( ) const { return size; } Fig. 8.4, Pg. 475

  17. //Overloaded assignment operator const Array &Array::operator =(const Array &right) { if ( size != right.size ) { delete [ ] ptr; size = right.size; ptr = new int[ size ]; assert( ptr ! = 0 ); } for (int i = 0; i < size; i++) ptr[ i ] = right.ptr[ i ]; } return *this; } Fig. 8.4, Pg. 476

  18. //Overloaded assignment operator const Array <T>&Array<T>::operator =(const Array <T>&right) { if ( size != right.size ) { delete [ ] ptr; size = right.size; ptr = new T[ size ]; assert( ptr ! = 0 ); } for (int i = 0; i < size; i++) ptr[ i ] = right.ptr[ i ]; } return *this; } Fig. 8.4, Pg. 476

  19. int Array::operator==(const Array & right) const { if (size != right.size) return false; for (int i = 0; i < size; i++) if (ptr[i] != right.ptr[i]) return false; return true; } Fig. 8.4, Pg. 476

  20. int Array<T>::operator==(const Array<T> & right) const { if (size != right.size) return false; for (int i = 0; i < size; i++) if (ptr[i] != right.ptr[i]) return false; return true; } Fig. 8.4, Pg. 476

  21. const int &Array::operator[ ] (int subscript) { // check for subscript out of range error assert(0<=subscript&&subscript<size); return ptr[subscript]; } Fig. 8.4, Pg. 476

  22. const T &Array<T>::operator[ ] (int subscript) { // check for subscript out of range error assert(0<=subscript&&subscript<size); return ptr[subscript]; } Fig. 8.4, Pg. 476

  23. int Array::getArrayCount( ) { return arrayCount; } istream &operator>>(istream &input, Array &a) } for (int i = 0; i < a.size; i++) input >> a.ptr[i]; return input; } Fig. 8.4, Pg. 477

  24. int Array<T>::getArrayCount( ) { return arrayCount; } istream &operator>>(istream &input, Array<T> &a) } for (int i = 0; i < a.size; i++) input >> a.ptr[i]; return input; } Fig. 8.4, Pg. 477

  25. ostream &operator<<(ostream &output, const Array &a) { for (int i = 0; i < a.size; i++) { output << a.ptr[i] << ‘ ‘; if ((i + 1) % 4 = = 0) output << endl; } if (i % 4 ! = 0) output << endl; return output; } Fig. 8.4, Pg. 477

  26. ostream &operator<<(ostream &output, const Array<T> &a) { for (int i = 0; i < a.size; i++) { output << a.ptr[i] << ‘ ‘; if ((i + 1) % 4 = = 0) output << endl; } if (i % 4 ! = 0) output << endl; return output; } Fig. 8.4, Pg. 477

  27. main ( ) { cout << “# of arrays instantiated =” << Array::getArrayCount( ); Array integers1 (7), integers2; cout << “# of arrays instantiated =” << Array::getArrayCount( ) <<endl << endl; Fig. 8.4, Pg. 477

  28. main ( ) { cout << “# of arrays instantiated =” << Array<int>::getArrayCount( ); Array<int> integers1 (7), integers2; cout << “# of arrays instantiated =” << Array<int>::getArrayCount( ) <<endl << endl; Fig. 8.4, Pg. 477

  29. Garage Stack Template

  30. The SCRATCHEMUP parking garage contains a single lane that holds up to 10 cars. There is only a single entrance/exit to the garage at one end of the lane. If a customer arrives to pick up a car that is not nearest the exit, all cars blocking it’s path are moved out, the customer’s car is driven out, and the other cars are restored in the same order that they were in originally.

  31. Write a program that processes a group of input lines. Each input line contains an ‘A’ for arrival or a ‘D’ for departure, and a license plate number. Cars are assumed to arrive and depart in the order specified by the input. The program should print a message whenever a car arrives or departs. When a car arrives, the message should specify whether or not there is room for the car in the garage. If there is no room, the car leaves without entering the garage.

  32. 121 GARAGE

  33. 121 333 GARAGE

  34. 121 333 297 GARAGE

  35. 121 333 297 GARAGE

  36. 121 333 297 GARAGE

  37. 333 297 GARAGE

  38. 333 297 GARAGE

  39. 333 297 GARAGE

  40. Exercises Page 665

  41. Exercises a) friend void f1 ( ); Page 665

  42. Exercises a) friend void f1 ( ); friend of all template classes instantiated Page 665

  43. Exercises b) friend void f2(C1<T1> &); Page 665

  44. Exercises b) friend void f2(C1<T1> &); friends of only a friend of C1 <particular type> Page 665

  45. Exercises c) friend void C2::f4( ); Page 665

  46. Exercises c) friend void C2::f4( ); f4 is part of C2 class a friend of all Page 665

  47. Exercises d) friend void C3<T1>::f5 (C1<T1> &); Page 665

  48. Exercises d) friend void C3<T1>::f5 (C1<T1> &); f5 is part of C3 <particular type>only friend of C1 <particular type> Page 665

  49. Exercises e) friend class C5; Page 665

  50. Exercises e) friend class C5; friend of all Page 665

More Related