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 = 10; cout << "A = " << A << " B = " << B << endl; //MySwap (A, B); cout << "A = " << A << " B = " << B << endl; getchar(); return(0); } 7
Write Code For MySwap Do Not Look Ahead In The Slides! void MySwap (int Value1, int Value2) { int Temp; } 8
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 void MySwap (int & Value1, int & Value2) Better - Pass By Reference Value1 = Value2; Temp = Value1; Value2 = Temp; Temp; int { }
11 11
12 Change The Main Program
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 No Signature For (float, float)
15 Overload MySwap!
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
Templates 18
Template Functions Begin With Something Like: template <class T> Or Maybe Something Like: template <class InfoType> Or Maybe Something Like: template <class I> 19
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
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 }
Template MySwap Works For in & float 23
24 24
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
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
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
Will Work For All Classes (As Long As Operator = Has Been Overloaded Properly) 30
31 31
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
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
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
Write The Class Definition For A Templated Class, Called ListType Whose Template Argument Is InfoType . template <class InfoType> class ListType { public: private: };
Write The Declaration To Create An Integer Type List , Called IntNos, of ListType . template <class InfoType> class ListType { public: private: };
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;
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;
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 };
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 };
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 };
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; };
"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; };
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; };
Recommend
More recommend