Copyright © 2002 Pearson Education, Inc. Slide 1.

Slides:



Advertisements
Similar presentations
Chapter 9 Strings. Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 9-2 Learning Objectives An Array Type for Strings C-Strings Character.
Advertisements

Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2003 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2003 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2003 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2003 Pearson Education, Inc. Slide 1.
Copyright © 2003 Pearson Education, Inc. Slide 1.
Chapter 7 Constructors and Other Tools. Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-2 Learning Objectives Constructors Definitions.
Chapter 11 Separate Compilation and Namespaces. Copyright © 2006 Pearson Addison-Wesley. All rights reserved Learning Objectives Separate Compilation.
Chapter 8 Operator Overloading, Friends, and References.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
1 Linked Lists III Template Chapter 3. 2 Objectives You will be able to: Write a generic list class as a C++ template. Use the template in a test program.
User Defined Functions
Chapter 16 Templates. Learning Objectives Function Templates – Syntax, defining – Compiler complications Class Templates – Syntax – Example: Pair class.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 14: More About Classes.
Copyright © 2012 Pearson Education, Inc. Chapter 14: More About Classes.
Engineering H192 - Computer Programming The Ohio State University Gateway Engineering Education Coalition Lect 12P. 1Winter Quarter User-Written Functions.
Chapter 6 Advanced Function Features Pass by Value Pass by Reference Const parameters Overloaded functions.
Template. 2 Using templates, it is possible to create generic functions and classes. In a generic function or class, the type of data upon which the function.
Copyright © 2014 Pearson Addison-Wesley. All rights reserved. Chapter 17 Templates.
Chapter 17 Templates. Generic Algorithms Algorithms in which the actions or steps are defined, but the data types of the items being manipulated are not.
1 Templates Chapter What You Will Learn Using function templates to created a group of overloaded functions Using class templates to create a group.
Templated Functions. Overloading vs Templating  Overloaded functions allow multiple functions with the same name.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 17 Templates.
Chapter 16 Templates. Copyright © 2006 Pearson Addison-Wesley. All rights reserved Learning Objectives  Function Templates  Syntax, defining 
Stacks and Queues. Sample PMT online… Browse 1120/sumII05/PMT/2004_1/
Copyright © 2008 Pearson Addison-Wesley. All rights reserved. Chapter 9 Pointers and Dynamic Arrays.
Templates. Objectives At the conclusion of this lesson, students should be able to Explain how function templates are used Correctly create a function.
 2007 Pearson Education, Inc. All rights reserved C++ as a Better C; Introducing Object Technology.
CSIS 123A Lecture 12 Templates. Introduction  C++ templates  Allow very ‘general’ definitions for functions and classes  Type names are ‘parameters’
Object-Oriented Programming in C++
Templates Templates for Algorithm Abstraction. Slide Templates for Algorithm Abstraction Function definitions often use application specific adaptations.
Engineering H192 - Computer Programming Gateway Engineering Education Coalition Lect 12P. 1Winter Quarter User-Written Functions Lecture 12.
C++ Programming Lecture 13 Functions – Part V The Hashemite University Computer Engineering Department (Adapted from the textbook slides)
Copyright 2006 Pearson Addison-Wesley, 2008, 2009 Joey Paquet 9-1 Concordia University Department of Computer Science and Software Engineering COMP345.
Classes, Interfaces and Packages
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 9 Pointers and Dynamic Arrays.
Templates Where the TYPE is generic. Templates for functions Used when the you want to perform the same operation on different data types. The definition.
Copyright © 2014 Pearson Addison-Wesley. All rights reserved. Chapter 9 Pointers and Dynamic Arrays.
Chapter 7 Constructors and Other Tools Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
Lecture 17: 4/4/2003CS148 Spring CS148 Introduction to Programming II Ayman Abdel-Hamid Department of Computer Science Old Dominion University Lecture.
Chapter 16 Templates Copyright © 2008 Pearson Addison-Wesley. All rights reserved.
Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 6-1 Learning Objectives  Classes  Constructors  Principles of OOP  Class type member.
Copyright 2006 Pearson Addison-Wesley, 2008, 2012 Joey Paquet 1 Concordia University Department of Computer Science and Software Engineering SOEN6441 –
Chapter 5 Arrays Copyright © 2016 Pearson, Inc. All rights reserved.
 2006 Pearson Education, Inc. All rights reserved Templates.
C++ Programming Lecture 13 Functions – Part V By Ghada Al-Mashaqbeh The Hashemite University Computer Engineering Department.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2002 Pearson Education, Inc. Slide 1.
Copyright © 2006 Pearson Addison-Wesley. All rights reserved Today’s Learning Objectives  Function Templates  Recursion Functions.
Java Interfaces CS 21a: Introduction to Computing I Department of Information Systems and Computer Science Ateneo de Manila University (see Chapter 9 of.
C++ Template.
User-Written Functions
Inheritance and Overloading
Templates.
Chapter 17 Templates. Chapter 17 Templates Overview 17.1 Templates for Algorithm Abstraction 17.2 Templates for Data Abstraction.
Chapter 17 Templates. Chapter 17 Templates Overview 17.1 Templates for Algorithm Abstraction 17.2 Templates for Data Abstraction.
Presentation transcript:

Copyright © 2002 Pearson Education, Inc. Slide 1

Copyright © 2002 Pearson Education, Inc. Slide 2 Chapter 16 Created by Frederick H. Colclough, Colorado Technical University Templates

Copyright © 2002 Pearson Education, Inc. Slide 3 Learning Objectives Function Templates Syntax, defining Compiler complications Class Templates Syntax Example: array template class Templates and Inheritance Example: partially-filled array template class

Copyright © 2002 Pearson Education, Inc. Slide 4 Introduction C++ templates Allow very general definitions for functions and classes Type names are parameters instead of actual types Precise definition determined at run-time

Copyright © 2002 Pearson Education, Inc. Slide 5 Function Templates Recall function swapValues: void swapValues(int& var1, int& var2) { int temp; temp = var1; var1 = var2; var2 = temp; } Applies only to variables of type int But code would work for any types!

Copyright © 2002 Pearson Education, Inc. Slide 6 Function Templates vs. Overloading Could overload function for chars: void swapValues(char& var1, char& var2) { char temp; temp = var1; var1 = var2; var2 = temp; } But notice: code is nearly identical! Only difference is type used in 3 places

Copyright © 2002 Pearson Education, Inc. Slide 7 Function Template Syntax Allow swap values of any type variables: template void swapValues(T& var1, T& var2) { T temp; temp = var1; var1 = var2; var2 = temp; } First line called template prefix Tells compiler whats coming is template And that T is a type parameter

Copyright © 2002 Pearson Education, Inc. Slide 8 Template Prefix Recall: template In this usage, class means type, or classification Can be confused with other known use of word class! C++ allows keyword typename in place of keyword class here But most use class anyway

Copyright © 2002 Pearson Education, Inc. Slide 9 Template Prefix 2 Again: template T can be replaced by any type Predefined or user-defined (like a C++ class type) In function definition body: T used like any other type Note: can use other than T, but T is traditional usage

Copyright © 2002 Pearson Education, Inc. Slide 10 Function Template Definition swapValues() function template is actually large collection of definitions! A definition for each possible type! Compiler only generates definitions when required But its as if youd defined for all types Write one definition works for all types that might be needed

Copyright © 2002 Pearson Education, Inc. Slide 11 Calling a Function Template Consider following call: swapValues(int1, int2); C++ compiler generates function definition for two int parameters using template Likewise for all other types Neednt do anything special in call Required definition automatically generated

Copyright © 2002 Pearson Education, Inc. Slide 12 Another Function Template Declaration/prototype: Template void showStuff(int stuff1, T stuff2, T stuff3); Definition: template void showStuff(int stuff1, T stuff2, T stuff3) { cout << stuff1 << endl << stuff2 << endl << stuff3 << endl; }

Copyright © 2002 Pearson Education, Inc. Slide 13 showStuff Call Consider function call: showStuff(2, 3.3, 4.4); Compiler generates function definition Replaces T with double Since second parameter is type double Displays:

Copyright © 2002 Pearson Education, Inc. Slide 14 Compiler Complications Function declarations and definitions Typically we have them separate For templates not supported on most compilers! Safest to place template function definition in file where invoked Many compilers require it appear 1 st Often we #include all template definitions

Copyright © 2002 Pearson Education, Inc. Slide 15 More Compiler Complications Check your compilers specific requirements Some need to set special options Some require special order of arrangement of template definitions vs. other file items Most usable template program layout: Template definition in same file its used Ensure template definition precedes all uses Can #include it

Copyright © 2002 Pearson Education, Inc. Slide 16 Multiple Type Parameters Can have: template Not typical Usually only need one replaceable type Cannot have unused template parameters Each must be used in definition Error otherwise!

Copyright © 2002 Pearson Education, Inc. Slide 17 Algorithm Abstraction Refers to implementing templates Express algorithms in general way: Algorithm applies to variables of any type Ignore incidental detail Concentrate on substantive parts of algorithm Function templates are one way C++ supports algorithm abstraction

Copyright © 2002 Pearson Education, Inc. Slide 18 Defining Templates Strategies Develop function normally Using actual data types Completely debug ordinary function Then convert to template Replace type names with type parameter as needed Advantages: Easier to solve concrete case Deal with algorithm, not template syntax

Copyright © 2002 Pearson Education, Inc. Slide 19 Inappropriate Types in Templates Can use any type in template for which code makes sense Code must behave in appropriate way e.g.: swapValues() template function Cannot use type for which assignment operator isnt defined Example: an array: int a[10], b[10]; swapValues(a, b); Arrays cannot be assigned!

Copyright © 2002 Pearson Education, Inc. Slide 20 Class Templates Can also generalize classes template Can also apply to class definition All instances of T in class definition replaced by type parameter Just like for function templates! Once template defined, can declare objects of the class

Copyright © 2002 Pearson Education, Inc. Slide 21 Class Template Definition template class Pair { public: Pair(); Pair(T firstVal, T secondVal); void setFirst(T newVal); void setSecond(T newVal); T getFirst() const; T getSecond() const; private: T first; T second; };

Copyright © 2002 Pearson Education, Inc. Slide 22 Template Class Pair Members template Pair ::Pair(T firstVal, T secondVal) { first = firstVal; second = secondVal; } template void Pair ::setFirst(T newVal) { first = newVal; }

Copyright © 2002 Pearson Education, Inc. Slide 23 Template Class Pair Objects of class have pair of values of type T Can then declare objects: Pair score; Pair seats; Objects then used like any other objects Example uses: score.setFirst(3); score.setSecond(0);

Copyright © 2002 Pearson Education, Inc. Slide 24 Pair Member Function Definitions Notice in member function definitions: Each definition is itself a template Requires template prefix before each definition Class name before :: is Pair Not just Pair But constructor name is just Pair Destructor name is also just ~Pair

Copyright © 2002 Pearson Education, Inc. Slide 25 Class Templates as Parameters Consider: int addUP(const Pair & the Pair); The type (int) is supplied to be used for T in defining this class type parameter It happens to be call-by-reference here Again: template types can be used anywhere standard types can

Copyright © 2002 Pearson Education, Inc. Slide 26 Class Templates Within Function Templates Rather than defining new overload: template T addUp(const Pair & the Pair); //Precondition: Operator + is defined for values of type T //Returns sum of two values in thePair Function now applies to all kinds of numbers

Copyright © 2002 Pearson Education, Inc. Slide 27 Restrictions on Type Parameter Only reasonable types can be substituted for T Consider: Assignment operator must be well-behaved Copy constructor must also work If T involves pointers, then destructor must be suitable! Similar issues as function templates

Copyright © 2002 Pearson Education, Inc. Slide 28 Type Definitions Can define new class type name To represent specialized class template name Example: typedef Pair PairOfInt; Name PairOfInt now used to declare objects of type Pair : PairOfInt pair1, pair2; Name can also be used as parameter, or anywhere else type name allowed

Copyright © 2002 Pearson Education, Inc. Slide 29 Friends and Templates Friend functions can be used with template classes Same as with ordinary classes Simply requires type parameter where appropriate Very common to have friends of template classes Especially for operator overloads (as weve seen)

Copyright © 2002 Pearson Education, Inc. Slide 30 Predefined Template Classes Recall vector class Its a template class! Another: basic_string template class Deals with strings of any-type elements e.g.: basic_string works for chars basic_string works for doubles basic_string works for YourClass objects

Copyright © 2002 Pearson Education, Inc. Slide 31 basic_string Template Class Already used it! Recall string Its an alternate name for basic_string All member functions behave similarly for basic_string basic_string defined in library Definition is in std namespace

Copyright © 2002 Pearson Education, Inc. Slide 32 Templates and Inheritance Nothing new here Derived template classes Can derive from template or nontemplate class Derived class is then naturally a template class Syntax same as ordinary class derived from ordinary class

Copyright © 2002 Pearson Education, Inc. Slide 33 Summary Function templates Define functions with parameter for a type Class templates Define class with parameter for subparts of class Predefined vector and basic_string classes are template classes Can define template class derived from a template base class