#oop_d_its - 9th - template
TRANSCRIPT
![Page 1: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/1.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 1
C++ <Template>
![Page 2: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/2.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 2
How to implement ↓ in
OOP ?¿several methods with
same function statementsbut take different type of parameters
![Page 3: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/3.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 3
What are you going to code ?¿
- to express swap function for various data type -
![Page 4: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/4.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 4
Declare it one by one ?¿
void swapInt (int *a, int *b) ;void swapFloat (float *c, float *d) ;void swapChar (char *p, char *q) ;…
// every methods has a specific name
![Page 5: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/5.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 5
Make it more general , guys !
One by one declarationFunction Overloading
![Page 6: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/6.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 6
Function Overloading
void swap (int *a, int *b)
{ int temp; temp = *a; *a = *b; *b = temp; }
void swap (float *c, float *d)
{ float temp; temp = *c; *c = *d; *d = temp; }
void swap (char *p, char *q)
{ char temp; temp = *p; *p = *q; *q = temp; }
![Page 7: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/7.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 7
Here it is , C++ introduce
<template> !One by one declarationFunction Overloading
Template
![Page 8: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/8.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 8
Why <templates>C++ promotes code reusability
Inheritance and composition provide a way to re-use object code
Templates provide a way to re-use source code
Example: Queue<T>generic Queue having a type parameter T
T can be replaced with actual types
![Page 9: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/9.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 9
Why use <templates>
Templates are easier to write. You create only one generic version of your class or function instead of manually creating specializations.
Templates can be easier to understand, since they can provide a straightforward way of abstracting type information.
Templates are type-safe. Because the types that templates act upon are known at compile time, the compiler can perform type checking before errors occur.
![Page 10: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/10.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 10
<template>
<template>
Function Class
![Page 11: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/11.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 11
Function Template
![Page 12: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/12.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 12
What’s it all about
Easily create a large range of related functions or classes
Function template - the blueprint of the related functions
Template function - a specific function made from a function template
![Page 13: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/13.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 13
Look at this declaration of
Function Template
template <class tipe>
void swap (tipe &a,tipe &b)
{
tipe c;
c = a;
a = b;
b = c;
}
![Page 14: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/14.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 14
Function Usage Example
Instance of int
void main(void) { int a,b; a = 10; b = 20; swap(a,b); cout << a << “ “ << b << endl;
}
Instance of float
void main(void) {
float a,b;
a = 10.0;
b = 20.0;
swap(a,b);
cout << a << “ “
<< b << endl;
}
![Page 15: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/15.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 15
<template> effects
It’s reusable ► we can gain the time for coding
It’s possible to swap 2 objects instantiated from a class
![Page 16: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/16.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 16
Overloading Template Function
#include
<iostream.h>
template <class Tipe>
void swap (Tipe
&a,Tipe &b)
{
Tipe tmp;
tmp = a;
a = b;
b = tmp;
}
void swap(float &a,float
&b)
{
float c;
a = (a < 0.00) ? –a : a;
b = (b < 0.00) ? –b : b;
c = a;
a = b;
b = c;
}
![Page 17: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/17.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 17
Class Template
![Page 18: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/18.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 18
Class Templatetemplate <class MyTipe>
class CMyTemplate
{
protected :
MyTipe m_a,m_b;
public :
void Done(void) {
memset (&m_a, 0,
sizeof(MyTipe) );
}
};
/* method is declared
outside the class */
template <class MyTipe>
void
CMyTemplate<MyTipe
>::Init (MyTipe
a,MyTipe b)
{
m_a = a;
m_b = b;
}
![Page 19: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/19.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 19
Class Template on …
struct
template <class
MyTipe>
struct tMyStruct
{
MyTipe a,b;
};
union
template <class
MyTipe>
union _MyUnion
{
MyTipe a;
int b;
};
![Page 20: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/20.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 20
Class Template Usage
void main(void)
{
CMyTemplate<short> a;
tMystruct<short> b;
_MyUnion<float> c;
}
![Page 21: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/21.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 21
Using 2 Type (Example)
template <class MyTipe1,class MyTipe2>
class CMyTemplate {
protected : MyTipe1 m_a MyTipe2
m_b; public :
void Init(MyTipe1 a,MyTipe2 b)
{m_a = a; m_b = b;
} };
void main(void) {
CMyTemplate<short,float> a;
}
![Page 22: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/22.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS 22
For your practice …
Exercise
Declare and Define template for your latest Classes of ...
Shape (ex: public getColor(), protected color)
2D Shape, 3D Shape (ex: public getArea(), protected edgeLength)
Triangle, Circle, Square; Cube, Cylinder, Sphere
Lab Session (Senin, 19.00 – 21.00)
Please provide:the softcopy (send it by email – deadline Sunday 23:59)the hardcopy (bring it when attending the lab session)
![Page 23: #OOP_D_ITS - 9th - Template](https://reader036.vdocument.in/reader036/viewer/2022081602/555cd8c9d8b42a4f2b8b50c2/html5/thumbnails/23.jpg)
12/04/2023Hadziq Fabroyir - Informatics ITS
☺~ Next: Exception HIndling ~☺
[ 23 ]