SlideShare a Scribd company logo
1 of 23
Templates
Object Oriented Programming Copyright © 2012 IM
Group. All rights
reserved
Training
• Makes a simple function to swap 2 characters.
Copyright © 2012 IM
Group. All rights
reserved
swap_values for char
• Here is a version of swap_values to swap
character variables:
▫ void swap_values(char& v1, char& v2)
{
char temp;
temp = v1;
v1 = v2;
v2 = temp;
}
Copyright © 2012 IM
Group. All rights
reserved
A General swap_values
• A generalized version of swap_values is shown
here.
▫ void swap_values(type_of_var& v1, type_of_var& v2)
{
type_of_var temp;
temp = v1;
v1 = v2;
v2 = temp;
}
▫ This function, if type_of_var could accept any type,
could be used to swap values of any type
Copyright © 2012 IM
Group. All rights
reserved
• A C++ function template will allow swap_values
to swap values of two variables of the same type
▫ Example:
template<class T>
void swap_values(T& v1, T& v2)
{
T temp;
temp = v1;
v1 = v2;
v = temp;
}
Template prefix
Type parameter
Templates for Functions
Copyright © 2012 IM
Group. All rights
reserved
Template Details
• template<class T> is the template prefix
▫ Tells compiler that the declaration or definition that
follows is a template
▫ Tells compiler that T is a type parameter
 class means type in this context
(typename could replace class but class is usually used)
 T can be replaced by any type argument
(whether the type is a class or not)
• A template overloads the function name by
replacing T with the type used in a function call
Copyright © 2012 IM
Group. All rights
reserved
Calling a Template Function
• Calling a function defined with a template is
identical to calling a normal function
▫ Example:
To call the template version of swap_values
char s1, s2;
int i1, i2;
…
swap_values(s1, s2);
swap_values(i1, i2);
 The compiler checks the argument types and
generates an appropriate version of swap_values
Copyright © 2012 IM
Group. All rights
reserved
Templates and Declarations
• A function template may also have a separate
declaration
▫ The template prefix and type parameter are used
▫ Depending on your compiler
 You may, or may not, be able to separate declaration and
definitions of template functions just as you do with regular
functions
▫ To be safe, place template function definitions in the same file
where they are used…with no declaration
 A file included with #include is, in most cases, equivalent to
being "in the same file“
 This means including the .cpp file or .h file with
implementation code
Copyright © 2012 IM
Group. All rights
reserved
Templates with Multiple Parameters
• Function templates may use more than one
parameter
▫ Example:
template<class T1, class T2>
 All parameters must be used in the template
function
Copyright © 2012 IM
Group. All rights
reserved
Defining Templates
• When defining a template it is a good idea…
▫ To start with an ordinary function that
accomplishes the task with one type
 It is often easier to deal with a concrete case rather
than the general case
▫ Then debug the ordinary function
▫ Next convert the function to a template by
replacing type names with a type parameter
Copyright © 2012 IM
Group. All rights
reserved
Copyright ©
2012 IM
Group. All
rights reserved
Templates for Data Abstraction
Object Oriented Programming
Templates for Data Abstraction
• Class definitions can also be made more general
with templates
▫ The syntax for class templates is basically the
same as for function templates
 template<class T> comes before the template
definition
 Type parameter T is used in the class definition just
like any other type
 Type parameter T can represent any type
Copyright © 2012 IM
Group. All rights
reserved
A Class Template
• The following is a class template
▫ An object of this class contains a pair of values of
type T
▫ template <class T>
class Pair
{
public:
Pair( );
Pair( T first_value, T second_value);
…
continued on next slide
Copyright © 2012 IM
Group. All rights
reserved
Template Class Pair (cont.)
▫ void set_element(int position, T value);
//Precondition: position is 1 or 2
//Postcondition: position indicated is set to value
T get_element(int position) const;
// Precondition: position is 1 or 2
// Returns value in position indicated
private:
T first;
T second;
};
Copyright © 2012 IM
Group. All rights
reserved
Declaring Template Class Objects
• Once the class template is defined, objects may
be declared
▫ Declarations must indicate what type is to be used
for T
▫ Example: To declare an object so it can hold a
pair of integers:
Pair<int> score;
or for a pair of characters:
Pair<char> seats;
Copyright © 2012 IM
Group. All rights
reserved
Using the Objects
• After declaration, objects based on a template
class are used just like any other objects
▫ Continuing the previous example:
score.set_element(1,3);
score.set_element(2,0);
seats.set_element(1, 'A');
Copyright © 2012 IM
Group. All rights
reserved
Defining the Member Functions
• Member functions of a template class are
defined
the same way as member functions of ordinary
classes
▫ The only difference is that the member function
definitions are themselves templates
Copyright © 2012 IM
Group. All rights
reserved
• This is a definition of the constructor for class
Pair that takes two arguments
template<class T>
Pair<T>::Pair(T first_value, T second_value)
: first(first_value), second(second_value)
{
//No body needed due to initialization above
}
▫ The class name includes <T>
Defining a Pair Constructor
Copyright © 2012 IM
Group. All rights
reserved
Defining set_element
• Here is a definition for set_element in the
template class Pair
void Pair<T>::set_element(int position, T value)
{
if (position = = 1)
first = value;
else if (position = = 2)
second = value;
else
…
}
Copyright © 2012 IM
Group. All rights
reserved
Template Class Names as Parameters
• The name of a template class may be used as the
type of a function parameter
▫ Example: To create a parameter of type
Pair<int>:
int add_up(const Pair<int>& the_pair);
//Returns the sum of two integers in the_pair
Copyright © 2012 IM
Group. All rights
reserved
Template Functions with Template
Class Parameters
• Function add_up from a previous example can
be made more general as a template function:
template<class T>
T add_up(const Pair<T>& the_pair)
//Precondition: operator + is defined for T
//Returns sum of the two values in
the_pair
Copyright © 2012 IM
Group. All rights
reserved
typedef and Templates
• You specialize a class template by giving a type
argument to the class name such as Pair<int>
▫ The specialized name, Pair<int>, is used just
like any class name
• You can define a new class type name with the
same meaning as the specialized name:
typedef Class_Name<Type_Arg>
New_Type_Name;
For example: typedef Pair<int> PairOfInt;
PairOfInt pair1, pair2;
Copyright © 2012 IM
Group. All rights
reserved
Any Questions
Session 6 Copyright © 2012 IM
Group. All rights
reserved

More Related Content

What's hot (20)

Strings
StringsStrings
Strings
 
C Programming: Control Structure
C Programming: Control StructureC Programming: Control Structure
C Programming: Control Structure
 
Function in C
Function in CFunction in C
Function in C
 
String Handling in c++
String Handling in c++String Handling in c++
String Handling in c++
 
Keywords, identifiers ,datatypes in C++
Keywords, identifiers ,datatypes in C++Keywords, identifiers ,datatypes in C++
Keywords, identifiers ,datatypes in C++
 
Command line arguments
Command line argumentsCommand line arguments
Command line arguments
 
Introduction to problem solving in C
Introduction to problem solving in CIntroduction to problem solving in C
Introduction to problem solving in C
 
classes and objects in C++
classes and objects in C++classes and objects in C++
classes and objects in C++
 
Resolución de problemas con java
Resolución de problemas con javaResolución de problemas con java
Resolución de problemas con java
 
Modular programming
Modular programmingModular programming
Modular programming
 
Introduction to c#
Introduction to c#Introduction to c#
Introduction to c#
 
functions of C++
functions of C++functions of C++
functions of C++
 
C++ programming
C++ programmingC++ programming
C++ programming
 
c++
 c++  c++
c++
 
String in c programming
String in c programmingString in c programming
String in c programming
 
Data types in c++
Data types in c++ Data types in c++
Data types in c++
 
Learn C# Programming - Encapsulation & Methods
Learn C# Programming - Encapsulation & MethodsLearn C# Programming - Encapsulation & Methods
Learn C# Programming - Encapsulation & Methods
 
Call by value or call by reference in C++
Call by value or call by reference in C++Call by value or call by reference in C++
Call by value or call by reference in C++
 
Number system conversion
Number system conversionNumber system conversion
Number system conversion
 
Programmazione Top Down in C++
Programmazione Top Down in C++Programmazione Top Down in C++
Programmazione Top Down in C++
 

Similar to OOP - Templates

Advanced Programming C++
Advanced Programming C++Advanced Programming C++
Advanced Programming C++guestf0562b
 
Generic Programming in java
Generic Programming in javaGeneric Programming in java
Generic Programming in javaGarik Kalashyan
 
An Introduction To C++Templates
An Introduction To C++TemplatesAn Introduction To C++Templates
An Introduction To C++TemplatesGanesh Samarthyam
 
Presentation 4th
Presentation 4thPresentation 4th
Presentation 4thConnex
 
2 BytesC++ course_2014_c13_ templates
2 BytesC++ course_2014_c13_ templates2 BytesC++ course_2014_c13_ templates
2 BytesC++ course_2014_c13_ templateskinan keshkeh
 
More Little Wonders of C#/.NET
More Little Wonders of C#/.NETMore Little Wonders of C#/.NET
More Little Wonders of C#/.NETBlackRabbitCoder
 
OOP - Introduction to Inheritance
OOP - Introduction to InheritanceOOP - Introduction to Inheritance
OOP - Introduction to InheritanceMohammad Shaker
 
Templates presentation
Templates presentationTemplates presentation
Templates presentationmalaybpramanik
 
[OLD VERSION, SEE DESCRIPTION FOR THE NEWER VERSION LINK] Hot С++: Universal ...
[OLD VERSION, SEE DESCRIPTION FOR THE NEWER VERSION LINK] Hot С++: Universal ...[OLD VERSION, SEE DESCRIPTION FOR THE NEWER VERSION LINK] Hot С++: Universal ...
[OLD VERSION, SEE DESCRIPTION FOR THE NEWER VERSION LINK] Hot С++: Universal ...Andrey Upadyshev
 
Function template
Function templateFunction template
Function templateKousalya M
 

Similar to OOP - Templates (20)

Savitch Ch 17
Savitch Ch 17Savitch Ch 17
Savitch Ch 17
 
Advanced Programming C++
Advanced Programming C++Advanced Programming C++
Advanced Programming C++
 
Savitch ch 17
Savitch ch 17Savitch ch 17
Savitch ch 17
 
C++ Templates 2
C++ Templates 2C++ Templates 2
C++ Templates 2
 
Generic Programming in java
Generic Programming in javaGeneric Programming in java
Generic Programming in java
 
An Introduction To C++Templates
An Introduction To C++TemplatesAn Introduction To C++Templates
An Introduction To C++Templates
 
Java Generics
Java GenericsJava Generics
Java Generics
 
templates.ppt
templates.ppttemplates.ppt
templates.ppt
 
Presentation 4th
Presentation 4thPresentation 4th
Presentation 4th
 
Java fundamentals
Java fundamentalsJava fundamentals
Java fundamentals
 
2 BytesC++ course_2014_c13_ templates
2 BytesC++ course_2014_c13_ templates2 BytesC++ course_2014_c13_ templates
2 BytesC++ course_2014_c13_ templates
 
More Little Wonders of C#/.NET
More Little Wonders of C#/.NETMore Little Wonders of C#/.NET
More Little Wonders of C#/.NET
 
The Future of C++
The Future of C++The Future of C++
The Future of C++
 
OOP - Introduction to Inheritance
OOP - Introduction to InheritanceOOP - Introduction to Inheritance
OOP - Introduction to Inheritance
 
Templates
TemplatesTemplates
Templates
 
Templates presentation
Templates presentationTemplates presentation
Templates presentation
 
Templates in c++
Templates in c++Templates in c++
Templates in c++
 
Templates2
Templates2Templates2
Templates2
 
[OLD VERSION, SEE DESCRIPTION FOR THE NEWER VERSION LINK] Hot С++: Universal ...
[OLD VERSION, SEE DESCRIPTION FOR THE NEWER VERSION LINK] Hot С++: Universal ...[OLD VERSION, SEE DESCRIPTION FOR THE NEWER VERSION LINK] Hot С++: Universal ...
[OLD VERSION, SEE DESCRIPTION FOR THE NEWER VERSION LINK] Hot С++: Universal ...
 
Function template
Function templateFunction template
Function template
 

More from Mohammad Shaker

Android Development - Session 5
Android Development - Session 5Android Development - Session 5
Android Development - Session 5Mohammad Shaker
 
Android Development - Session 4
Android Development - Session 4Android Development - Session 4
Android Development - Session 4Mohammad Shaker
 
Android Development - Session 2
Android Development - Session 2Android Development - Session 2
Android Development - Session 2Mohammad Shaker
 
Android Development - Session 1
Android Development - Session 1Android Development - Session 1
Android Development - Session 1Mohammad Shaker
 
NoSQL - A Closer Look to Couchbase
NoSQL - A Closer Look to CouchbaseNoSQL - A Closer Look to Couchbase
NoSQL - A Closer Look to CouchbaseMohammad Shaker
 
Introduction to Couchbase
Introduction to CouchbaseIntroduction to Couchbase
Introduction to CouchbaseMohammad Shaker
 

More from Mohammad Shaker (10)

Android Development - Session 5
Android Development - Session 5Android Development - Session 5
Android Development - Session 5
 
Android Development - Session 4
Android Development - Session 4Android Development - Session 4
Android Development - Session 4
 
Android Development - Session 2
Android Development - Session 2Android Development - Session 2
Android Development - Session 2
 
Android Development - Session 1
Android Development - Session 1Android Development - Session 1
Android Development - Session 1
 
Introduction to Qt
Introduction to QtIntroduction to Qt
Introduction to Qt
 
OOP - STL
OOP - STLOOP - STL
OOP - STL
 
OOP - Friend Functions
OOP - Friend FunctionsOOP - Friend Functions
OOP - Friend Functions
 
OOP - Introduction
OOP - IntroductionOOP - Introduction
OOP - Introduction
 
NoSQL - A Closer Look to Couchbase
NoSQL - A Closer Look to CouchbaseNoSQL - A Closer Look to Couchbase
NoSQL - A Closer Look to Couchbase
 
Introduction to Couchbase
Introduction to CouchbaseIntroduction to Couchbase
Introduction to Couchbase
 

Recently uploaded

DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - InfographicHr365.us smith
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsMehedi Hasan Shohan
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 

Recently uploaded (20)

DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Asset Management Software - Infographic
Asset Management Software - InfographicAsset Management Software - Infographic
Asset Management Software - Infographic
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Naraina Delhi 💯Call Us 🔝8264348440🔝
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
XpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software SolutionsXpertSolvers: Your Partner in Building Innovative Software Solutions
XpertSolvers: Your Partner in Building Innovative Software Solutions
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 

OOP - Templates

  • 1. Templates Object Oriented Programming Copyright © 2012 IM Group. All rights reserved
  • 2. Training • Makes a simple function to swap 2 characters. Copyright © 2012 IM Group. All rights reserved
  • 3. swap_values for char • Here is a version of swap_values to swap character variables: ▫ void swap_values(char& v1, char& v2) { char temp; temp = v1; v1 = v2; v2 = temp; } Copyright © 2012 IM Group. All rights reserved
  • 4. A General swap_values • A generalized version of swap_values is shown here. ▫ void swap_values(type_of_var& v1, type_of_var& v2) { type_of_var temp; temp = v1; v1 = v2; v2 = temp; } ▫ This function, if type_of_var could accept any type, could be used to swap values of any type Copyright © 2012 IM Group. All rights reserved
  • 5. • A C++ function template will allow swap_values to swap values of two variables of the same type ▫ Example: template<class T> void swap_values(T& v1, T& v2) { T temp; temp = v1; v1 = v2; v = temp; } Template prefix Type parameter Templates for Functions Copyright © 2012 IM Group. All rights reserved
  • 6. Template Details • template<class T> is the template prefix ▫ Tells compiler that the declaration or definition that follows is a template ▫ Tells compiler that T is a type parameter  class means type in this context (typename could replace class but class is usually used)  T can be replaced by any type argument (whether the type is a class or not) • A template overloads the function name by replacing T with the type used in a function call Copyright © 2012 IM Group. All rights reserved
  • 7. Calling a Template Function • Calling a function defined with a template is identical to calling a normal function ▫ Example: To call the template version of swap_values char s1, s2; int i1, i2; … swap_values(s1, s2); swap_values(i1, i2);  The compiler checks the argument types and generates an appropriate version of swap_values Copyright © 2012 IM Group. All rights reserved
  • 8. Templates and Declarations • A function template may also have a separate declaration ▫ The template prefix and type parameter are used ▫ Depending on your compiler  You may, or may not, be able to separate declaration and definitions of template functions just as you do with regular functions ▫ To be safe, place template function definitions in the same file where they are used…with no declaration  A file included with #include is, in most cases, equivalent to being "in the same file“  This means including the .cpp file or .h file with implementation code Copyright © 2012 IM Group. All rights reserved
  • 9. Templates with Multiple Parameters • Function templates may use more than one parameter ▫ Example: template<class T1, class T2>  All parameters must be used in the template function Copyright © 2012 IM Group. All rights reserved
  • 10. Defining Templates • When defining a template it is a good idea… ▫ To start with an ordinary function that accomplishes the task with one type  It is often easier to deal with a concrete case rather than the general case ▫ Then debug the ordinary function ▫ Next convert the function to a template by replacing type names with a type parameter Copyright © 2012 IM Group. All rights reserved
  • 11. Copyright © 2012 IM Group. All rights reserved Templates for Data Abstraction Object Oriented Programming
  • 12. Templates for Data Abstraction • Class definitions can also be made more general with templates ▫ The syntax for class templates is basically the same as for function templates  template<class T> comes before the template definition  Type parameter T is used in the class definition just like any other type  Type parameter T can represent any type Copyright © 2012 IM Group. All rights reserved
  • 13. A Class Template • The following is a class template ▫ An object of this class contains a pair of values of type T ▫ template <class T> class Pair { public: Pair( ); Pair( T first_value, T second_value); … continued on next slide Copyright © 2012 IM Group. All rights reserved
  • 14. Template Class Pair (cont.) ▫ void set_element(int position, T value); //Precondition: position is 1 or 2 //Postcondition: position indicated is set to value T get_element(int position) const; // Precondition: position is 1 or 2 // Returns value in position indicated private: T first; T second; }; Copyright © 2012 IM Group. All rights reserved
  • 15. Declaring Template Class Objects • Once the class template is defined, objects may be declared ▫ Declarations must indicate what type is to be used for T ▫ Example: To declare an object so it can hold a pair of integers: Pair<int> score; or for a pair of characters: Pair<char> seats; Copyright © 2012 IM Group. All rights reserved
  • 16. Using the Objects • After declaration, objects based on a template class are used just like any other objects ▫ Continuing the previous example: score.set_element(1,3); score.set_element(2,0); seats.set_element(1, 'A'); Copyright © 2012 IM Group. All rights reserved
  • 17. Defining the Member Functions • Member functions of a template class are defined the same way as member functions of ordinary classes ▫ The only difference is that the member function definitions are themselves templates Copyright © 2012 IM Group. All rights reserved
  • 18. • This is a definition of the constructor for class Pair that takes two arguments template<class T> Pair<T>::Pair(T first_value, T second_value) : first(first_value), second(second_value) { //No body needed due to initialization above } ▫ The class name includes <T> Defining a Pair Constructor Copyright © 2012 IM Group. All rights reserved
  • 19. Defining set_element • Here is a definition for set_element in the template class Pair void Pair<T>::set_element(int position, T value) { if (position = = 1) first = value; else if (position = = 2) second = value; else … } Copyright © 2012 IM Group. All rights reserved
  • 20. Template Class Names as Parameters • The name of a template class may be used as the type of a function parameter ▫ Example: To create a parameter of type Pair<int>: int add_up(const Pair<int>& the_pair); //Returns the sum of two integers in the_pair Copyright © 2012 IM Group. All rights reserved
  • 21. Template Functions with Template Class Parameters • Function add_up from a previous example can be made more general as a template function: template<class T> T add_up(const Pair<T>& the_pair) //Precondition: operator + is defined for T //Returns sum of the two values in the_pair Copyright © 2012 IM Group. All rights reserved
  • 22. typedef and Templates • You specialize a class template by giving a type argument to the class name such as Pair<int> ▫ The specialized name, Pair<int>, is used just like any class name • You can define a new class type name with the same meaning as the specialized name: typedef Class_Name<Type_Arg> New_Type_Name; For example: typedef Pair<int> PairOfInt; PairOfInt pair1, pair2; Copyright © 2012 IM Group. All rights reserved
  • 23. Any Questions Session 6 Copyright © 2012 IM Group. All rights reserved