1 Object-Oriented Programming -- Using C++ Andres, Wen-Yuan Liao Department of Computer Science and Engineering De Lin Institute of Technology

Slides:



Advertisements
Similar presentations
C++ How to Program, 7/e © by Pearson Education, Inc. All Rights Reserved.
Advertisements

14 Templates. OBJECTIVES In this chapter you will learn:  To use function templates to conveniently create a group of related (overloaded) functions.
 2006 Pearson Education, Inc. All rights reserved Templates.
 2006 Pearson Education, Inc. All rights reserved Templates.
Dr. Ahmad R. Hadaegh A.R. Hadaegh California State University San Marcos (CSUSM) Page 1 Function and Class Templates.
Class template Describing a generic class Instantiating classes that are type- specific version of this generic class Also are called parameterized types.
 2000 Prentice Hall, Inc. All rights reserved. Chapter 22 - C++ Templates Outline 22.1Introduction 22.2Class Templates 22.3Class Templates and Non-type.
1 L39 Generics (1). 2 OBJECTIVES  To create generic methods that perform identical tasks on arguments of different types.  To create a generic Stack.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 11 - Templates Outline 11.1 Introduction 11.2 Function Templates 11.3 Overloading Function Templates.
 2006 Pearson Education, Inc. All rights reserved. Templates (again)CS-2303, C-Term Templates (again) CS-2303 System Programming Concepts (Slides.
Templates. Objectives At the conclusion of this lesson, students should be able to Explain how function templates are used Correctly create a function.
 2006 Pearson Education, Inc. All rights reserved Generics.
Templates Outlines 1. Introduction 2. Function Templates 3. Overloading Function Templates 4. Class Templates.
Templates Overload function: define more than one function With same function name Different parameter type Different type Different number of parameter.
Templates Zhen Jiang West Chester University
C++ How to Program, 8/e © by Pearson Education, Inc. All Rights Reserved. Note: C How to Program, Chapter 22 is a copy of C++ How to Program Chapter.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 11 - Templates Outline 11.1 Introduction 11.2 Function Templates 11.3 Overloading Function Templates.
EEL 3801 Part VIII Fundamentals of C and C++ Programming Template Functions and Classes.
Introduction to C++ Systems Programming. Systems Programming: Introduction to C++ 2 Systems Programming: 2 Introduction to C++  Syntax differences between.
Concordia University Department of Computer Science and Software Engineering Click to edit Master title style ADVANCED PROGRAM DESIGN WITH C++ Templates.
Templates ©Bruce M. Reynolds & Cliff Green1 C++ Programming Certificate University of Washington Cliff Green.
Lecture 6 : Template Acknowledgement : courtesy of Prof. Dekai Wu lecture slides.
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools Polymorphism, Template, Preprocessor Lecture 6 June 28, 2004.
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 122 – Data Structures Templates.
C++ How to Program, 9/e © by Pearson Education, Inc. All Rights Reserved.
CIS 270—Application Development II Chapter 18-Generics.
CS240 Computer Science II Function and Class Templates (Based on Deitel) Dr. Erh-Wen Hu.
 2000 Deitel & Associates, Inc. All rights reserved. Chapter 12 - Templates Outline 12.1Introduction 12.2Function Templates 12.3Overloading Template Functions.
Chapter 7 Templates. Objectives Introduction Function Templates Class Templates Standard Template Library.
Templates Class Templates Used to specify generic class types where class members data types can be specified as parameters, e.g. here is a generic List.
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools Templates Lecture 10 March 23, 2004.
1 Lecture 14 Functions Functions with Empty Parameter Lists Empty parameter lists  void or leave parameter list empty  Indicates function takes.
12/23/2015Engineering Problem Solving with C++, second edition, J. Ingber 1 Engineering Problem Solving with C++, Etter/Ingber Chapter 9 An Introduction.
C++ Programming Lecture 13 Functions – Part V The Hashemite University Computer Engineering Department (Adapted from the textbook slides)
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools Template, Standard Template Library Lecture 9 March 22, 2005.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Chapter 22 - C++ Templates Outline 22.1Introduction.
TEMPLATESTEMPLATES BCAS,Bapatla B.mohini devi. Templates Outline 22.1Introduction 22.2Class Templates 22.3Class Templates and Non-type Parameters 22.4Templates.
CS212: Object Oriented Analysis and Design Lecture 22: Generic Class Design.
Template Lecture 11 Course Name: High Level Programming Language Year : 2010.
1 Advanced Topics in Functions Lecture Unitary Scope Resolution Operator Unary scope resolution operator ( :: )  Access global variable if.
 2003 Prentice Hall, Inc. All rights reserved. 1 Chapter 3 - Functions Outline 3.15Functions with Empty Parameter Lists 3.16Inline Functions 3.17References.
CSCI-383 Object-Oriented Programming & Design Lecture 25.
LECTURE LECTURE 17 Templates 19 An abstract recipe for producing concrete code.
Chapter 18 Introduction to Custom Templates C++ How to Program, 9/e ©2016 by Pearson Education, Inc., Hoboken, NJ. All Rights Reserved. Instructor Note:
 2000 Deitel & Associates, Inc. All rights reserved. 12.1Introduction Templates - easily create a large range of related functions or classes –function.
Chapter 22 - C++ Templates Associate Prof. Yuh-Shyan Chen Dept. of Computer Science and Information Engineering National Chung-Cheng University.
C++ Templates 1. Why Use Templates? C++ requires variables, functions, classes etc with specific data types. However, many algorithms (quicksort for example)
Lecture 17: 4/4/2003CS148 Spring CS148 Introduction to Programming II Ayman Abdel-Hamid Department of Computer Science Old Dominion University Lecture.
 2003 Prentice Hall, Inc. All rights reserved. 1 Ders Notu 8 - Template İçerik 11.1 Giriş 11.2 Fonksiyon Template ları 11.3 Overloading Fonksiyon Templates.
Templates יום רביעי 08 יוני 2016 יום רביעי 08 יוני 2016 יום רביעי 08 יוני 2016 יום רביעי 08 יוני 2016 יום רביעי 08 יוני 2016 יום רביעי 08 יוני 2016 יום.
 2006 Pearson Education, Inc. All rights reserved Templates.
Templates 3 Templates and type parameters The basic idea templates is simple: we can make code depend on parameters, so that it can be used in different.
C++ Programming Lecture 13 Functions – Part V By Ghada Al-Mashaqbeh The Hashemite University Computer Engineering Department.
 2003 Prentice Hall, Inc. All rights reserved. 1 IS 0020 Program Design and Software Tools Template, Preprocessing Lecture 9 November 2, 2004.
Session 03 - Templates Outline 03.1Introduction 03.2Function Templates 03.3Overloading Template Functions 03.4Class Templates 03.5Class Templates and Non-type.
Chapter 22 - C++ Templates
Chapter 18 Introduction to Custom Templates
Chapter 14 Templates C++ How to Program, 8/e
Introduction to Custom Templates
CS212: Object Oriented Analysis and Design
Chapter 11 - Templates Outline Introduction Function Templates Overloading Function Templates Class Templates Class.
Introduction to Programming
Templates (again) Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2nd edition,
Chapter 11 - Templates Outline Introduction Function Templates Overloading Function Templates Class Templates Class.
template< class T > class Stack { public:
Chapter 11 - Templates Outline Introduction Function Templates Overloading Function Templates Class Templates Class.
Chapter 22 - C++ Templates
Chapter 22 - C++ Templates
Chapter 11 - Templates Outline Introduction Function Templates Overloading Function Templates Class Templates Class.
COP 3330 Object-oriented Programming in C++
Presentation transcript:

1 Object-Oriented Programming -- Using C++ Andres, Wen-Yuan Liao Department of Computer Science and Engineering De Lin Institute of Technology

2 Chapter 11 - Templates Outline 11.1 Introduction 11.2 Function Templates 11.3 Overloading Function Templates 11.4 Class Templates 11.5 Class Templates and Nontype Parameters 11.6 Templates and Inheritance 11.7 Templates and Friends 11.8 Templates and static Members

Introduction Templates –Function templates Specify entire range of related (overloaded) functions with a single code segment –Function-template specializations –Class templates Specify entire range of related classes with a single code segment –Class-template specializations

Function Templates Overloaded functions –Similar operations Different types of data Function templates –Identical operations Different types of data –Single function template Compiler generates separate object-code functions –Type checking

Function Templates (3.21) Example template // or template T square( T value1 ) { return value1 * value1; } –T is a formal type, used as parameter type Above function returns variable of same type as parameter –In function call, T replaced by real type If int, all T 's become int s int square(int value1 ) { return value1 * value1; } If double, all T 's become double s double square(double value1 ) { return value1 * value1; }

6 1 // Fig. 3.27: fig03_27.cpp 10 template 11 T maximum( T value1, T value2, T value3 ) { 13 T max = value1; 15 if ( value2 > max ) 16 max = value2; 18 if ( value3 > max ) 19 max = value3; 21 return max; 23 } 25 int main() { 28 int int1, int2, int3; 31 cin >> int1 >> int2 >> int3; 34 cout << maximum( int1, int2, int3 ); 38 double double1, double2, double3; 41 cin >> double1 >> double2 >> double3; 44 cout << maximum( double1, double2, double3 ); 48 char char1, char2, char3; 51 cin >> char1 >> char2 >> char3; 54 cout << maximum( char1, char2, char3 ) 56 << endl; 58 return 0; 60 } int maximum( int value1, int value2, int value3 ) { int max = value1; …… } double maximum( double value1, double value2, double value3 ) { double max = value1; …… } char maximum( char value1, char value2, char value3 ) { char max = value1; …… }

7 Input three integer values: The maximum integer value is: 3 Input three double values: The maximum double value is: 3.3 Input three characters: A C B The maximum character value is: C

Function Templates Function-template definitions –Keyword template –List formal type parameters in angle brackets ( ) Each parameter preceded by keyword class or typename –class and typename interchangeable template Specify types of –Arguments to function –Return type of function –Variables within function

9 fig11_01.cpp (1 of 2) 1 // Fig. 11.1: fig11_01.cpp 9 template 10 void printArray( const T *array, const int count ) { 12 for ( int i = 0; i < count; i++ ) 13 cout << array[ i ] << " "; 15 cout << endl; 17 } 19 int main() { 21 const int aCount = 5; 22 const int bCount = 7; 23 const int cCount = 6; 25 int a[ aCount ] = { 1, 2, 3, 4, 5 }; 26 double b[ bCount ] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 }; 27 char c[ cCount ] = "HELLO"; 29 cout << "Array a contains:" << endl; 32 printArray( a, aCount ); 34 cout << "Array b contains:" << endl; 37 printArray( b, bCount ); 39 cout << "Array c contains:" << endl; 42 printArray( c, cCount ); 44 return 0; 46 } void printArray( const int *array, const int count ) { void printArray( const double *array, const int count ) { void printArray( const char *array, const int count ) { a[0] a[1] a[2] a[3] a[4] b[6] b[0] b[1] b[2] b[3] b[5] b[4] H E L L O \0 c[0] c[1] c[2] c[3] c[5] c[4]

10 Array a contains: Array b contains: Array c contains: H E L L O

Overloading Function Templates Related function-template specializations –Same name Compiler uses overloading resolution Function template overloading template void printArray( const T *array, const int count ) –Function templates with same name Different parameters template int printArray( T const * const array, int size, int lowSubscript, int highSubscript )

Overloading Function Templates Function template overloading –Non-template functions with same name Different function arguments void printArray( char const * const stringArray[], int size ) –Compiler performs matching process Tries to find precise match of function name and argument types If fails, function template –Generate function-template specialization with precise match

Class Templates Stack –LIFO (last-in-first-out) structure Class templates –Generic programming –Describe notion of stack generically Instantiate type-specific version –Parameterized types Require one or more type parameters –Customize “generic class” template to form class-template specialization

14 tstack1.h (1 of 4) 1 // Fig. 11.2: tstack1.h 6 template 7 class Stack { 9 public: 10 Stack( int = 10 ); 13 ~Stack() { 15 delete [] stackPtr; 17 } 19 bool push( const T& ); 20 bool pop( T& ); 23 bool isEmpty() const { 25 return top == -1; 27 } 30 bool isFull() const { 32 return top == size - 1; 34 } 36 private: 37 int size; // # of elements in the stack 38 int top; // location of the top element 39 T *stackPtr; // pointer to the stack 41 }; class Stack + Stack( int = 10 ); + ~Stack() + bool push( const T& ); + bool pop( T& ); + bool isEmpty() const + bool isFull() const - int size; - int top; - T *stackPtr; [9] [0] [1] [2] [3] [4] [5] [6] [7] [8] T

15 44 template 45 Stack ::Stack( int s ) { 47 size = s > 0 ? s : 10; 48 top = -1; // Stack initially empty 49 stackPtr = new T[ size ]; 51 } 55 template 56 bool Stack ::push( const T &pushValue ) { 58 if ( !isFull() ) { 59 stackPtr[ ++top ] = pushValue; 60 return true; 62 } 64 return false; 66 } 70 template 71 bool Stack ::pop( T &popValue ) { 73 if ( !isEmpty() ) { 74 popValue = stackPtr[ top-- ]; // remove item from Stack 75 return true; 77 } 79 return false; 81 } class Stack + Stack( int = 10 ); + ~Stack() + bool push( const T& ); + bool pop( T& ); + bool isEmpty() const + bool isFull() const - int size; - int top; - T *stackPtr; [9] [0] [1] [2] [3] [4] [5] [6] [7] [8] T

16 1 // Fig. 11.3: fig11_03.cpp 9 #include "tstack1.h" 11 int main() { 13 Stack doubleStack( 5 ); 14 double doubleValue = 1.1; 18 while ( doubleStack.push( doubleValue ) ) { 19 cout << doubleValue << ' '; 20 doubleValue += 1.1; 22 } 24 cout << "\nStack is full. Cannot push " << doubleValue 25 << "\n\nPopping elements from doubleStack\n"; 27 while ( doubleStack.pop( doubleValue ) ) 28 cout << doubleValue << ' '; 30 cout << "\nStack is empty. Cannot pop\n"; 32 Stack intStack; 33 int intValue = 1; 34 cout << "\nPushing elements onto intStack\n"; 36 while ( intStack.push( intValue ) ) { 37 cout << intValue << ' '; 38 ++intValue; 40 } Stack doubleStack - size = 5; - top = -1; - double * stackPtr; Stack intStack - size = 10; - top = -1; - int * stackPtr; [9] [0] [1] [2] [3] [4] [5] [6] [7] [8] [0] [1] [2] [3] [4]

17 fig11_03.cpp (3 of 3) fig11_03.cpp output (1 of 1) 42 cout << "\nStack is full. Cannot push " << intValue 43 << "\n\nPopping elements from intStack\n"; 45 while ( intStack.pop( intValue ) ) 46 cout << intValue << ' '; 48 cout << "\nStack is empty. Cannot pop\n"; 50 return 0; } Pushing elements onto doubleStack Stack is full. Cannot push 6.6 Popping elements from doubleStack Stack is empty. Cannot pop Pushing elements onto intStack Stack is full. Cannot push 11 Popping elements from intStack Stack is empty. Cannot pop

18 1 // Fig. 11.4: fig11_04.cpp 10 #include "tstack1.h" 13 template 14 void testStack( 15 Stack &theStack, // reference to Stack 16 T value, // initial value to push 17 T increment, // increment for subsequent values 18 const char *stackName ) { 20 cout << "\nPushing elements onto " << stackName << '\n'; 22 while ( theStack.push( value ) ) { 23 cout << value << ' '; 24 value += increment; 26 } 28 cout << "\nStack is full. Cannot push " << value 29 << "\n\nPopping elements from " << stackName << '\n'; 31 while ( theStack.pop( value ) ) 32 cout << value << ' '; 34 cout << "\nStack is empty. Cannot pop\n"; 36 } class Stack + Stack( int = 10 ); + ~Stack() + bool push( const T& ); + bool pop( T& ); + bool isEmpty() const + bool isFull() const - int size; - int top; - T *stackPtr; theStack T

19 38 int main() { 40 Stack doubleStack( 5 ); 41 Stack intStack; 43 testStack( doubleStack, 1.1, 1.1, "doubleStack" ); 44 testStack( intStack, 1, 1, "intStack" ); 46 return 0; 48 } Pushing elements onto doubleStack Stack is full. Cannot push 6.6 Popping elements from doubleStack Stack is empty. Cannot pop Pushing elements onto intStack Stack is full. Cannot push 11 Popping elements from intStack Stack is empty. Cannot pop Stack doubleStack - size = 5; - top = -1; - double * stackPtr; Stack intStack - size = 10; - top = -1; - int * stackPtr; [9] [0] [1] [2] [3] [4] [5] [6] [7] [8] [0] [1] [2] [3] [4] void testStack( Stack &theStack, double value, double increment, const char *stackName ) void testStack( Stack &theStack, int value, int increment, const char *stackName ) theStack

Class Templates and Nontype Parameters Class templates –Nontype parameters Default arguments Treated as consts Example: template Stack mostRecentSalesFigures; –Declares object of type Stack –Type parameter Default type –Example: template

Templates and Inheritance Several ways of relating templates and inheritance –Class template derived from class-template specialization –Class template derived from non-template class –Class-template specialization derived from class-template specialization –Non-template class derived from class-template specialization TTT

Templates and Friends Friendships between class template and –Global function –Member function of another class –Entire class

Templates and Friends template class X { friend void f1(); friend void f2( X & ); friend void A::f4(); friend void C ::f5( X & ); friend class Y; friend class Z ; };

Templates and Friends friend functions –Inside definition of template class X friend void f1(); –f1() friend of all class-template specializations friend void f2( X & ); –f2( X & ) friend of X only, f2( X & ) friend of X only, … friend void A::f4(); –Member function f4 of class A friend of all class-template specializations

Templates and Friends friend functions –Inside definition of template class X friend void C ::f5( X & ); –Member function C ::f5( X & ) friend of class X only friend classes –Inside definition of template class X friend class Y; –Every member function of Y friend of every class-template specialization friend class Z ; –class Z friend of class-template specialization X, etc.

Templates and static Members Non-template class –static data members shared between all objects Class-template specialization –Each has own copy of static data members –static variables initialized at file scope –Each has own copy of static member functions

27 Programming Homework Deadline: 12/15