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

Member Templates-Object Oriented Programming-Lecture Slides, Slides of Object Oriented Programming

Main topics in this course are object-orientation, objects and classes, overloading, inheritance, polymorphism, generic programming, exception handling, introduction to design patterns. This lecture includes: Member, Template, Float, Return, Class, Vector, Virtual, Const, Private, Public, Int

Typology: Slides

2011/2012

Uploaded on 08/08/2012

anchita
anchita 🇮🇳

4.4

(6)

116 documents

1 / 13

Toggle sidebar

Related documents


Partial preview of the text

Download Member Templates-Object Oriented Programming-Lecture Slides and more Slides Object Oriented Programming in PDF only on Docsity! Object-Oriented Programming (OOP) Lecture No. 35 Member Templates ►A class or class template can have member functions that are themselves templates docsity.com …Member Templates template<typename T> class Complex { T real, imag; public: // Complex<T>( T r, T im ) Complex( T r, T im ) : real(r), imag(im) {} // Complex<T>(const Complex<T>& c) Complex(const Complex<T>& c) : real( c.real ), imag( c.imag ) {} … }; …Member Templates int main() { Complex< float > fc( 0, 0 ); Complex< double > dc = fc; // Error return 0; } docsity.com <float> Instantiation class Complex<float> { float real, imag; public: Complex( float r, float im ) : real(r), imag(im) {} // No Copy Constructor … }; Class Template Specialization ►Like function templates, a class template may not handle all the types successfully ►Explicit specializations are provided to handle such types docsity.com …Class Template Specialization int main() { Vector< int > iv1( 2 ); iv1[0] = 15; iv1[1] = 27; Vector< int > iv2( iv1 ); Vector< int > iv3( 2 ); iv3 = iv1; return 0; } …Class Template Specialization int main() { Vector< char* > sv1( 2 ); sv1[0] = "Aamir"; sv1[1] = "Nasir"; Vector< char* > sv2( sv1 ); Vector< char* > sv3( 2 ); sv3 = sv1; return 0; } docsity.com …Class Template Specialization template<> class Vector< char* > { private: int size; char** ptr; public: // Vector< char* >( int = 10 ); Vector( int = 10 ); Vector( const Vector< char* >& ); virtual ~Vector(); …Class Template Specialization int getSize() const; const Vector< char* >& operator =( const Vector< char* >& ); const char*& operator []( int ); void insert( char*, int ); }; docsity.com …Class Template Specialization template<> int Vector<char*>::getSize() const { return size; } …Class Template Specialization template<> const Vector<char*>& Vector<char*>:: operator=(const Vector<char*>& right) { if ( this == &right ) return *this; for (int i = 0; i < size; i++) delete [] ptr[i]; delete [] ptr; docsity.com …Class Template Specialization size = right.size; if ( size == 0 ) { ptr = 0; return *this; } ptr = new char*[size]; …Class Template Specialization for (int i = 0; i < size; i++) if ( right.ptr[i] != 0 ) { ptr[i] = new char[strlen( right.ptr[i] ) + 1]; strcpy( ptr[i], right.ptr[i] ); } else ptr[i] = 0; } docsity.com …Class Template Specialization template<> const char*& Vector<char*>:: operator []( int index ) { if ( index < 0 || index >= size ) { cout << "Error: index out of range\n"; exit( 1 ); } return ptr[index]; } …Class Template Specialization template<> void Vector< char* >::insert( char* str, int i ) { delete [] ptr[i]; if ( str != 0 ) { ptr[i] = new char[strlen(str)+1]; strcpy( ptr[i], str ); } else ptr[i] = 0; } docsity.com
Docsity logo



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