Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

Object-Oriented Programming (OOP) Lecture 33: Templates and User-Defined Types, Slides of Object Oriented Programming

This document from docsity.com covers the topic of templates in object-oriented programming (oop), specifically focusing on function templates and class templates, as well as user-defined types as arguments. It also discusses the differences between overloading and templates, and the use of templates as policies. Examples are provided to illustrate the concepts.

Typology: Slides

2011/2012

Uploaded on 11/09/2012

bacha
bacha 🇮🇳

4.3

(42)

214 documents

1 / 27

Toggle sidebar

Related documents


Partial preview of the text

Download Object-Oriented Programming (OOP) Lecture 33: Templates and User-Defined Types and more Slides Object Oriented Programming in PDF only on Docsity! Object-Oriented Programming (OOP) Lecture No. 33 Docsity.com Recap • Templates are generic abstractions • C++ templates are of two kinds – Function Templates – Class Templates • A general template can be specialized to specifically handle a particular type Docsity.com …User-Defined Types • Consider the String class without overloaded operator “==“ class String { char* pStr; … // Operator “==“ not defined }; Docsity.com … User-Defined Types template< typename T > bool isEqual( T x, T y ) { return ( x == y ); } int main() { String s1 = “xyz”, s2 = “xyz”; isEqual( s1, s2 ); // Error! return 0; } Docsity.com …User-Defined Types class String { char* pStr; … friend bool operator ==( const String&, const String& ); }; Docsity.com Overloading vs Templates • Different data types, similar operation Needs function overloading • Different data types, identical operation Needs function templates Docsity.com Example Overloading vs Templates • ‘+’ operation is overloaded for different operand types • A single function template can calculate sum of array of many types Docsity.com …Example Overloading vs Templates String operator +( const String& x, const String& y ) { String tmp; tmp.pStr = new char[strlen(x.pStr) + strlen(y.pStr) + 1 ]; strcpy( tmp.pStr, x.pStr ); strcat( tmp.pStr, y.pStr ); return tmp; } Docsity.com Template Arguments as Policy • Policy specializes a template for an operation (behavior) Docsity.com Example – Policy • Write a function that compares two given character strings • Function can perform either case-sensitive or non-case sensitive comparison Docsity.com First Solution int caseSencompare( char* str1, char* str2 ) { for (int i = 0; i < strlen( str1 ) && i < strlen( str2 ); ++i) if ( str1[i] != str2[i] ) return str1[i] - str2[i]; return strlen(str1) - strlen(str2); } Docsity.com …Second Solution // if condition: (caseSen && str1[i] != str2[i]) || (!caseSen && toupper(str1[i]) != toupper(str2[i])) Docsity.com Third Solution class CaseSenCmp { public: static int isEqual( char x, char y ) { return x == y; } }; Docsity.com … Third Solution class NonCaseSenCmp { public: static int isEqual( char x, char y ) { return toupper(x) == toupper(y); } }; Docsity.com Sample Output Case Sensitive: 32 // Not Equal Non-case Sensitive: 0 // Equal Docsity.com Default Policy template< typename C = CaseSenCmp > int compare( char* str1, char* str2 ) { for (int i = 0; i < strlen( str1 ) && i < strlen( str2 ); i++) if ( !C::isEqual (str1[i], str2[i]) ) return str1[i] - str2[i]; return strlen(str1) - strlen(str2); }; Docsity.com …Third Solution int main() { int i, j; char *x = "hello", *y = "HELLO"; i = compare(x, y); j = compare< NonCaseSenCmp >(x, y); cout << "Case Sensitive: " << i; cout << "\nNon-Case Sensitive: “ << j << endl; return 0; } Docsity.com
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved