Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
Post on 04-Jun-2018
228 Views
Preview:
Transcript
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
1/33
Object-Oriented Programming
(OOP)
Lecture No. 37
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
2/33
Resolution Order
template< typename T >
class Vector { };
template< typename T >
class Vector< T* > { };
template< >
class Vector< char* > { };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
3/33
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
4/33
Example Resolution Order
int main() {Vector< char* > strVector;
// Vector< char* > instantiated
Vector< int* > iPtrVector;
// Vector< T* > instantiated
Vector< int > intVector;// Vector< T > instantiated
return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
5/33
Function Template Overloading
template< typename T >
void sort( T );
template< typename T >void sort( Vector< T > & );
template< >
void sort< Vector >(Vector< char* > & );
void sort( char* );
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
6/33
Resolution Order
Compiler searches target of a function call
in the following order
Ordinary Function
Complete Specialization
Partial Specialization
Generic Template
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
7/33
ExampleResolution Order
int main() {
char* str = Hello World!;
sort(str); // sort( char* )
Vector v1 = {ab, cd, };
sort(v1); //sort( Vector & )
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
8/33
Example Resolution Order
Vector v2 = { 5, 10, 15, 20 };
sort(v2); // sort( Vector &)
int iArray[] = { 5, 2, 6 , 70 };
sort(iArray); // sort( T )
return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
9/33
Templates and Inheritance
We can use inheritance comfortably with
templates or their specializations
But we must follow one rule:
Derived class must take at least as manytemplate parameters as the base class
requires for an instantiation
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
10/33
Derivations of a Template
A class template may inherit from anotherclass template
template< class T >class A
{ };
template< class T >
class B : public A< T >
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
11/33
Derivations of a Template
int main() {
A< int > obj1;
B< int > obj2;
return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
12/33
Derivations of a Template
A partial specialization may inherit from a
class template
template< class T >
class B< T* > : public A< T >
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
13/33
Derivations of a Template
int main() {
A< int > obj1;
B< int* > obj2;
return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
14/33
Derivations of a Template
Complete specialization or ordinary classcannot inherit from a class template
template< >class B< char* > : public A< T >
{ };// Error: T undefined
class B : public A< T >
{ };// Error: T undefined
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
15/33
Derivations of a Partial Sp.
A class template may inherit from a partialspecialization
template< class T >class A
{ };
template< class T >
class A< T* >
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
16/33
Derivations of a Partial Sp.
template< class T >
class B : public A< T* >
{ }
int main() {
A< int* > obj1;
B< int > obj2;
return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
17/33
Derivations of a Partial Sp.
A partial specialization may inherit from a
partial specialization
template< class T >
class B< T* > : public A< T* >
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
18/33
Derivations of a Partial Sp.
int main() {
A< int* > obj1;
B< int* > obj2;
return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
19/33
Derivations of a Partial Sp.
Complete specialization or ordinary classcannot inherit from a partial specialization
template< >class B< int* > : public A< T* >
{ } // Error: Undefined T
class B : public A< T* >
{ } // Error: Undefined T
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
20/33
Derivations of a Complete Sp.
A class template may inherit from a
complete specialization
template< class T > class A
{ };
template< >
class A< float* >
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
21/33
Derivations of a Complete Sp.
template< class T >
class B : public A< float* >
{ };
int main() {
A< float* > obj1;
B< int > obj2;return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
22/33
Derivations of a Complete Sp.
A partial specialization may inherit from a
complete specialization
template< class T >
class B< T* > : public A< float* >
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
23/33
Derivations of a Complete Sp.
int main() {
A< float* > obj1;
B< int* > obj2;
return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
24/33
Derivations of a Complete Sp.
A complete specialization may inherit from
a complete specialization
template< >
class B< double* > :
public A< float* >
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
25/33
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
26/33
Derivations of a Complete Sp.
An ordinary class may inherit from a
complete specialization
class B : public A< float* >
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
27/33
Derivations of a Complete Sp.
int main() {
A< float* > obj1;
B obj2;
return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
28/33
Derivations of Ordinary Class
A class template may inherit from an
ordinary class
class A
{ };
template< class T >
class B : public A
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
29/33
Derivations of Ordinary Class
int main() {
A obj1;
B< int > obj2;
return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
30/33
Derivations of Ordinary Class
A partial specialization may inherit from an
ordinary class
template< class T >
class B< T* > : public A
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
31/33
Derivations of Ordinary Class
int main() {
A obj1;
B< int* > obj2;
return 0;
}
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
32/33
Derivations of Ordinary Class
A complete specialization may inherit from
an ordinary class
template< >
class B< char* > : public A
{ };
8/13/2019 Object Oriented Programming (OOP) - CS304 Power Point Slides Lecture 37
33/33
Derivations of Ordinary Class
int main() {
A obj1;
B< char* > obj2;
return 0;
}
top related