1 / 17

Templates

Templates. Chapter 12. What You Will Learn. Using function templates to created a group of overloaded functions. Using class templates to create a group of related types. Distinguish between function templates and template functions. Introduction.

tyrell
Download Presentation

Templates

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. Templates Chapter 12

  2. What You Will Learn Using function templates to created a group of overloaded functions Using class templates to create a group of related types Distinguish between function templates and template functions

  3. Introduction • Templates enable us to specify an entire range of related functions • takes a single code segment • the related functions are overloaded • called template functions • Can also have template classes • might write a single class template for a stack class • then have C++ generate stack-of-int, stack-of-float, etc. classes

  4. Function Templates • Overloaded functions • normally used to perform similar operations on different types of data • overload + operator for complex numbers • If operations are identical for each type, this could be done more compactly using function templates • programmer writes single function template definition • compiler generates separate object-code functions for each type of call

  5. Function Templates Required syntax • Function template definition syntaxtemplate < class Whatever >void DoSomething ( Whatever Stuff) { . . . } • The function DoSomething can be called with different types for the parameter Stuff • The compiler generates separate code for each call, using the appropriate type See Figure 12.1 on Text CD

  6. Function Templates Specify as many classes in the template as types will vary in the different implementations to be used Needs appear only once here to appear multiple times here template < class T1, class T2 >void DoSomething ( T1 *tPtr, T1 v1, T2 v2) { . . . }

  7. Function Template template < class T1, class T2 >void DoSomething ( T1 *tPtr, T1 v1, T2 v2) { . . . } // calls to DoSomething int intval = 5; float floatval, *fptr, char ch, * cptr; Dosomething (cptr, ch, floatval); DoSomething (fptr, floatval, intval); View Figure 12.2 with audio from text CD

  8. Overloading Template Functions • Provide other function templates that specify the same function name but different function parameters • Provide other non-template functions with the same function name but with different arguments • Compiler determines which function to call • looks for precise match • then looks for function template which would match

  9. Class Templates • Consider a class which would implement a matrix, or a list, or a stack • is a set of numbers and the various operations on those numbers • Possible to need one of these classes for different types of numbers • integer stack, float stack, character stack, etc. • Need means for describing our class generically and instantiating the class for different types ==> CLASS TEMPLATE !

  10. Class Templates Specifies type to be used wherever theT1 appears in theclass template declaration // syntax example of declaration template < class T1 > class Whatever { public: void DoIt (T1 tval); . . . private: T1 tlist[30]; } ; View fig 12.3, listen to text CD audio // Syntax example of instantiationWhatever < int > intWhatever;

  11. Class Templates Important !!!Most compilers require declarations and definitions to be in the same file Not separate .h and .cpp files Specified prior to each member function definition // syntax for definition template <class T1>void Whatever < T1 >::DoIt (T1 tval) { … cout << tval; … } Included in each function heading Used as type in parameter list and function as needed

  12. Non-Type Parameters template < class T1, int size > • When we saw the previous declarationtemplate < class T1 >T1 is called a "type parameter" • we are using the parameter to specify what the type will be • Also possible to have parameters which do not specify a type -- non-type parameters

  13. Templates & Inheritance • A class template can be derived from a template class • A class template can be derived from a non-template class • A template class can be derived from a class template • A non-template class can be derived from a class template

  14. Templates & Friends • Consider the following declaration:template < class Q > class P { friend void snarf ( ) ; . . . }; • Function snarf is a friend of every template class instantiated from class P

  15. Templates & Friends • Given this declaration:template < class Q > class P { friend void snarf ( ) ; friend void blat (P < Q > &); . . . }; • For a particular type of Q (say int), blat (P<int>&)is a friend of P<int> only

  16. Templates & Friends • Friendship can be established between a class template and … • a global function • a member function of another class (possibly a template class) • an entire class (possibly a template class)

  17. Templates & Static Members • With a non-template class • one copy of a static data member is shared among all objects of the class • the static data member must be initialized at file scope • With a template class • each instantiantion has its own copy of each static data member of the class template • all objects of that template class share that one static data member • static data members must be initialized at file scope

More Related