1 2 2 3 3
play

1 2 2 3 3 4 C:\Temp\Templates 5 6 Use This Main Program - PDF document

1 2 2 3 3 4 C:\Temp\Templates 5 6 Use This Main Program Copy/Paste Main # include "Utilities.hpp" # include "Student.hpp" void MySwap (int Value1, int Value2); int main(int argc, char * argv[]) { int A = 5, B =


  1. 1

  2. 2 2

  3. 3 3

  4. 4 C:\Temp\Templates

  5. 5

  6. 6 Use This Main Program

  7. Copy/Paste Main # include "Utilities.hpp" # include "Student.hpp" void MySwap (int Value1, int Value2); int main(int argc, char * argv[]) { int A = 5, B = 10; cout << "A = " << A << " B = " << B << endl; //MySwap (A, B); cout << "A = " << A << " B = " << B << endl; getchar(); return(0); } 7

  8. Write Code For MySwap Do Not Look Ahead In The Slides! void MySwap (int Value1, int Value2) { int Temp; } 8

  9. How Many Of You Have Something Like The Following: void MySwap (int Value1, int Value2) { int Temp; Temp = Value1; Only To Find That It Value1 = Value2; Does Not Work? Value2 = Temp; } Pass By Value? - BAD! 9

  10. 10 void MySwap (int & Value1, int & Value2) Better - Pass By Reference Value1 = Value2; Temp = Value1; Value2 = Temp; Temp; int { }

  11. 11 11

  12. 12 Change The Main Program

  13. Copy/Paste Main int main(int argc, char * argv[]) { int A = 5, B = 10; cout << "A = " << A << " B = " << B << endl; MySwap (A, B); cout << "A = " << A << " B = " << B << endl; float AA = 5.5, BB = 7.7; cout << "AA = " << AA << " BB = " << BB << endl; MySwap (AA, BB); cout << "AA = " << AA << " BB = " << BB << endl; getchar(); return(0); 13 }

  14. 14 No Signature For (float, float)

  15. 15 Overload MySwap!

  16. int Element bool Lumber float Squadron short int Unit double Officer long int Desk Student Flower Part Shrub Employee Tree Infinite # Auto China CD Of Objects Equipment Stamp Soldier Coin 16

  17. 17 17

  18. Templates 18

  19. Template Functions Begin With Something Like: template <class T> Or Maybe Something Like: template <class InfoType> Or Maybe Something Like: template <class I> 19

  20. The class Variable Must Appear In The Parameter List template <class T> void MySwap ( T & Value1, T & Value2); template <class T> void MySwap (T & Value1, T & Value2) { } 20

  21. 21 21

  22. Copy/Paste Main int main(int argc, char * argv[]) { int A = 5, B = 10; cout << "A = " << A << " B = " << B << endl; MySwap (A, B); cout << "A = " << A << " B = " << B << endl; float AA = 5.5, BB = 7.7; cout << "AA = " << AA << " BB = " << BB << endl; MySwap (AA, BB); cout << "AA = " << AA << " BB = " << BB << endl; getchar(); return(0); 22 }

  23. Template MySwap Works For in & float 23

  24. 24 24

  25. Copy/Paste - Add This To Main char C = 'X', D = '?'; cout << "C = " << C << " D = " << D << endl; MySwap (C, D); cout << "C = " << C << " D = " << D << endl; getchar(); return(0); } 25

  26. 26 26

  27. Copy/Paste - Add This To Main bool E = true, F = false; cout << "E = " << E << " F = " << F << endl; MySwap (E, F); cout << "E = " << E << " F = " << F << endl; getchar(); return(0); } 27

  28. 28 28

  29. Copy/Paste - Add This To Main Student Student1 ("Pete", 2222, MALE), Student2 ("Sandra", 3333, FEMALE); Student1.Display("Student1"); Student2.Display("Student2"); MySwap (Student1, Student2); Student1.Display("Student1"); Student2.Display("Student2"); getchar(); return(0); } 29

  30. Will Work For All Classes (As Long As Operator = Has Been Overloaded Properly) 30

  31. 31 31

  32. C++ Also Supports Generics, But Templates Enable Us To Easily Create Functions That Can Be Used With Thousands Of Data Types. template <class T> void BubbleSort(T Array[], long ActNo); template <class InfoType> long Search(InfoType Data[], long ActNo, InfoType SoughtInfo); The class Variable Must Appear In The Parameter List 32

  33. 33 33

  34. Template Functions Begin With Something Like: Templates Are Not Really Functions. They are more of a design or pattern for what shall become a function if evoked. The Compiler Shall Generate the Necessary Variations of this Function During Run Time. Template Functions Must be placed in .hpp files! 34

  35. Template - Multiple Parameters template <class InfoType, class HeaderNodeType> class Binary Tree { ... }; An important goal of both software engineering and object-oriented programming is reuse! Function Templates facilitate code reuse! 35

  36. 36 36

  37. Write The Class Definition For A Templated Class, Called ListType Whose Template Argument Is InfoType . template <class InfoType> class ListType { public: private: };

  38. Write The Declaration To Create An Integer Type List , Called IntNos, of ListType . template <class InfoType> class ListType { public: private: };

  39. Add An Array To The Private Data of ListType . template <class InfoType> class ListType { public: private: InfoType Info[10]; // Container To Store Data long ActNo; // Actual No Items In Container ListType <int> IntNos; ListType <char> Chars; ListType <Student> Class;

  40. Add An Array To The Private Data of ListType . template <class InfoType> class ListType { public: private: InfoType * Info; // Container To Store Data long ActNo; // Actual No Items In Container ListType <int> IntNos; ListType <char> Chars; ListType <Student> Class;

  41. Write The Constructor ListType (long int NewMax = 10) template <class InfoType> class ListType { public: private: InfoType Info[10]; // Container To Store Data long Max, // Capacity Of The Container ActNo; // Actual No Items In Container };

  42. Write The Code For The Constructor ListType (long int NewMax = 10) template <class InfoType> class ListType { public: ListType (long int NewMax = 10); private: InfoType Info[10]; // Container To Store Data long Max, // Capacity Of The Container ActNo; // Actual No Items In Container };

  43. ListType (long int NewMax = 10) template <class InfoType> ListType <InfoType> :: ListType (long int NewMax) { puts("Evoking Constructor ListType(NeMax)"); printf("NewMax = %ld\n\n", NewMax); Update main };

  44. ListType (long int NewMax = 10) Allocate Memory - Set Max & ActNo template <class InfoType> ListType <InfoType> :: ListType (long int NewMax) { ActNo = 0; Info = new InfoType [NewMax]; if (Info == NULL) { puts("Not Enough Memory!"); Max = 0; } else Max = NewMax ‐ 1; };

  45. "Memory Leak" You Have Created A Memory leak If You Have Executed The Program One TIme!? template <class InfoType> ListType <InfoType> :: ListType (long int NewMax) { ActNo = 0; Info = new InfoType [NewMax]; if (Info == NULL) { puts("Not Enough Memory!"); Max = 0; } else Max = NewMax ‐ 1; };

  46. Write The Destructor ~ ListType (void) template <class InfoType> class ListType { public: ListType (long int NewMax = 10); ~ListType(void); private: InfoType Info[10]; long Max, ActNo; };

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend