C++ OOP: Member Templates, Specializations, Function Templates, Non-type Parameters, Slides of Object Oriented Programming

This document from docsity.com covers various advanced topics in object-oriented programming (oop) using c++. It explains member templates, their parameterization, template specializations, partial and complete specializations for classes and functions, and non-type parameters with default values. The document also includes examples and usage of these concepts.

Typology: Slides

2011/2012

Uploaded on 11/09/2012

bacha
bacha 🇮🇳

4.3

(41)

213 documents

1 / 25

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Object-Oriented Programming
(OOP)
Lecture No. 36
Docsity.com
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19

Partial preview of the text

Download C++ OOP: Member Templates, Specializations, Function Templates, Non-type Parameters and more Slides Object Oriented Programming in PDF only on Docsity!

Object-Oriented Programming

(OOP)

Lecture No. 36

Recap – Member Templates

  • A class template may have member

templates

  • They can be parameterized independent

of the class template

Member Templates Revisited

  • An ordinary class can also have member

templates

class ComplexSet { … template< class T > insert( Complex< T > c ) { // Add “c” to the set } };

… Member Templates Revisited

int main() { Complex< int > ic( 10, 5 ); Complex< float > fc( 10.5, 5.7 ); Complex< double > dc( 9.567898, 5 ); ComplexSet cs; cs.insert( ic ); cs.insert( fc ); cs.insert( dc ); return 0; }

Example – Partial Specialization

template< class T > class Vector { }; template< class T > class Vector< T* > { };

Example – Partial Specialization

template< class T, class U, class V > class A {}; template< class T, class V > class A< T, T, V > {}; template< class T, class U, int I > class A< T, U, I > {}; template< class T > class A< int, T, 5 > {};

Example – Complete Specialization

template< class T, class U, class V > class A {}; template< > class A< int, char*, double > {};

Function Templates

  • A function template may also have partial

specializations

Example

  • Consider the following template template< typename T > bool isEqual( T x, T y ) { return ( x == y ); }

Complete Specialization

  • We have already used this complete

specialization

template< > bool isEqual< const char* >( const char* x, const char* y ) { return ( strcmp( x, y ) == 0 ); }

Using Different Specializations

int main() { int i, j; char* a, b; Shape *s1 = new Line(); Shape *s2 = new Circle(); isEqual( i, j ); // Template isEqual( a, b ); // Complete Sp. isEqual( s1, s2 ); // Partial Sp. return 0; }

Non-type Parameters

  • Template parameters may include non-

type parameters

  • The non-type parameters may have

default values

  • They are treated as constants
  • Common use is static memory allocation

Example – Non-type Parameters

template< class T > Array::Array() { if (size > 0) ptr = new T[size]; else ptr = NULL; }

Example – Non-type Parameters

int main() { Array< char > cArray( 10 ); Array< int > iArray( 15 ); Array< double > dArray( 20 ); return 0; }