1
2
3
Template

concept can be use in two
different concepts
i.
Function template
ii.
Class template

4
The

body of the function template is
written in the same way in each case
as function is written but the difference
is t...
Function Template

Template function:
template <class T>
void get(T a)
{
cout <<" value : "<<a;
cin.get();
}
void main()
{...
Continued…



Function Template:



Simple Function

7
template <class T>
T square(T value)
{
return value*value;
}
int main()
{
int a=5;
float b=7.5;
long c=50000900000;
double...
template<class t >
void get( t x, t y , int c)
{
int sum;
sum=x+y+c;
cout<<sum;
cin.get();
getch();
}

void main()
{
int a...
Function Template

template<class t, class v >
void get(t x, v y ,int c)
{
v sum;
sum=x+y+c;
cout<<sum;
cin.get();
getch()...
Class

template definition does not

change
Class template work for variable of all
types instead of single basic type

...
Class Template

template <class t>
class Basket
{
t first;
t second;
public:
Basket (t a, t b)
{
first = a;
second = b;
}
...
Continued…

If we write
Basket <int> b(6.99,8.88);
Instead of
Basket <int> b(6,8);
Output will be in integers i.e
8

13
Class Template

template <class t>
class Basket
{
t first;
t second;
public:
Basket (t a, t b)
{
first = a;
second = b;
}
...
Continued…

template <class t>
t Basket <t>::Big()
{
return (first > second?first:second);

}
The

name Basket<t> is used...
Continued…

int Basket<int>::Big()
{
return (first > second?first:second);
}
float Basket<float>::Big()
{
return (first > ...
template<class TYPE>
struct link
{
TYPE data;
link* next;
};
template<class TYPE>
class linklist
{
private:
link<TYPE>* fi...
Continued…

{

linklist<char> lch;

cout << endl << current->data;
current = current->next;
}
}

lch.additem('a');
lch.add...
An

exception is a condition that
occurs at execution time and make
normal continuation of program
impossible.
When

an ...
The

way of handling anomalous situations in a
program-run is known as exception handling.
Its advantage are:





Ex...






Tries a block of code that may contain
exception
Throws an exception when one is detected
Catches the exception ...


A block which includes the code that may
generate the error(an exception)
try { ….
}






Can be followed by one or...




Used to indicate that an exception has occurred
Will be caught by closest exception handler
Syntax:if ( // error)
{...
Contain the exception handler.
 These know what to do with the exceptiontypically print out that a type of error has
occu...
25
Exceptions

const int DivideByZero = 10;
double divide(double x, double
y)
{
if(y==0)
{
throw DivideByZero;
}
return x/y;
...
















Class Aclass
{
Public:
Class Anerror
{
};
Void func()
{
if(/*error condition*/)
Throw Anerror(...
try
{
//try block
}
catch(type1 arg)
{
//catch block1
}
catch(type2 arg)
{
//catch block2
}

…….
…….
catch(typeN arg)
{
//...
Multiple Exceptions

const int Max=3;
class stack
{private:
int st[Max],top;
public:
class full
{};
Class empty
{};
stack(...
Continued…

int main()
{stack s1;
try
{
s1.push(11); s1.push(22);
s1.push(33); s1.push(44);
S1.pop();
s1.pop();
S1.pop();
...
class Distance
{
private:
int feet;
float inches;
public:
class InchesEx { };
Distance()
{ feet = 0; inches = 0.0; }
Dista...
Continued…
int main()
{
try
{
Distance dist1(17, 3.5);
Distance dist2;
dist2.getdist();
cout << "ndist1 = "; dist1.showdis...
class Distance
{
private:
int feet;
float inches;
public:
class InchesEx
{
public:
string origin;
float iValue;
InchesEx(s...
Continued…

if(inches >= 12.0)
throw InchesEx("getdist()
function", inches);
}
void showdist()
{ cout << feet << "’-" << i...
class InchesEx
{
public:
string origin;
float iValue;
InchesEx(string or, float in)
{
origin = or;
iValue = in;
}
};
35


Extracting data from the exception object
int main()
{
const unsigned long SIZE = 10000;
char* ptr;
try
{
ptr = new cha...
Upcoming SlideShare
Loading in...5
×

Presentation on template and exception

158

Published on

presentation on template and exception..
by syed sajid ali

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
158
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Presentation on template and exception

  1. 1. 1
  2. 2. 2
  3. 3. 3
  4. 4. Template concept can be use in two different concepts i. Function template ii. Class template 4
  5. 5. The body of the function template is written in the same way in each case as function is written but the difference is that they can handle arguments and return value of different types. 5
  6. 6. Function Template Template function: template <class T> void get(T a) { cout <<" value : "<<a; cin.get(); } void main() { int a=5; float b=4.3; get(a); get(b);  }  Simple function: void get(int a) { cout <<" value : "<<a; cin.get(); getch(); } void main() { int a=5; float b=4.3; get(a); get(b); } 6
  7. 7. Continued…  Function Template:  Simple Function 7
  8. 8. template <class T> T square(T value) { return value*value; } int main() { int a=5; float b=7.5; long c=50000900000; double d=784848.33; cout<<"square of int variable is : "<<square(a)<<endl; cout<<"square of long variable is : "<<square(b)<<endl; cout<<"square of long variable is : "<<square (c)<<endl; cout<<"square of double variable is : "<<square(d)<<endl; cin.get(); getch(); 8
  9. 9. template<class t > void get( t x, t y , int c) { int sum; sum=x+y+c; cout<<sum; cin.get(); getch(); } void main() { int a=6; int b=9; int c=8; get(a,b,c); } 9
  10. 10. Function Template template<class t, class v > void get(t x, v y ,int c) { v sum; sum=x+y+c; cout<<sum; cin.get(); getch(); } void main() { int a=6; float b=9.9; int c=8; get(a,b,c); } Output: 10
  11. 11. Class template definition does not change Class template work for variable of all types instead of single basic type 11
  12. 12. Class Template template <class t> class Basket { t first; t second; public: Basket (t a, t b) { first = a; second = b; } t Bat() { return (first > second?first:second); } }; //class end void main() { Basket <int> bo(6,8); cout<<bo.Bat()<<endl; Basket <float> b1(1.1,3.3); cout<<b1.Bat()<<endl; system ("pause"); } Output: 8 3.3 12
  13. 13. Continued… If we write Basket <int> b(6.99,8.88); Instead of Basket <int> b(6,8); Output will be in integers i.e 8 13
  14. 14. Class Template template <class t> class Basket { t first; t second; public: Basket (t a, t b) { first = a; second = b; } t Big(); }; //class end template <class t> t Basket <t>::Big() { return (first > second?first:second); } void main() { Basket <int> b(6,8); cout<<b.Big()<<endl; Basket <float> b1(4.1,1.1); cout<<b1.Big()<<endl; system ("pause"); } Output: 8 4.1 14
  15. 15. Continued… template <class t> t Basket <t>::Big() { return (first > second?first:second); } The name Basket<t> is used to identify the class of which Big() is a member function . In a normal non-template member function the name Basket alone would suffice. Void Basket :: Big() { return (first > second?first:second); } 15
  16. 16. Continued… int Basket<int>::Big() { return (first > second?first:second); } float Basket<float>::Big() { return (first > second?first:second); } 16
  17. 17. template<class TYPE> struct link { TYPE data; link* next; }; template<class TYPE> class linklist { private: link<TYPE>* first; public: linklist() { first = NULL; } void additem(TYPE d); void display(); }; template<class TYPE> void linklist<TYPE>::additem(TYPE d) { link<TYPE>* newlink = new link<TYPE>; newlink->data = d; newlink->next = first; first = newlink; } template<class TYPE> void linklist<TYPE>::display() { link<TYPE>* current = first; while( current != NULL ) 17
  18. 18. Continued… { linklist<char> lch; cout << endl << current->data; current = current->next; } } lch.additem('a'); lch.additem('b'); lch.additem('c'); lch.display(); cout << endl; system("pause"); int main() { linklist<double> ld; ld.additem(151.5); ld.additem(262.6); ld.additem(373.7); ld.display(); } OUTPUT 373.7 262.6 151.5 c b a 18
  19. 19. An exception is a condition that occurs at execution time and make normal continuation of program impossible. When an exception occurs, the program must either terminate or jump to special code for handling the exception.  Divide by zero errors.  Accessing the element of an array beyond its range  Invalid input  Hard disk crash  Opening a non existent file 19
  20. 20. The way of handling anomalous situations in a program-run is known as exception handling. Its advantage are:     Exception handling separate error-handling code from normal code. It clarifies the code and enhances readability Catch error s before it occurs. It makes for clear, robust and fault -tolerant program s. 20
  21. 21.     Tries a block of code that may contain exception Throws an exception when one is detected Catches the exception and handles it Thus there are three concepts i. The try block ii.The throwing of the exception iii.The catch block 21
  22. 22.  A block which includes the code that may generate the error(an exception) try { …. }    Can be followed by one or more catch blocks which handles the exception Control of the program passes from the statements in the try block ,to the appropriate catch block. Functions called try block, directly or indirectly, could test for the presence of the error 22
  23. 23.    Used to indicate that an exception has occurred Will be caught by closest exception handler Syntax:if ( // error) { Throw error(); } 23
  24. 24. Contain the exception handler.  These know what to do with the exceptiontypically print out that a type of error has occurred.  Catch blocks are typically located right after the try block that could throw the exception Syntax:catch() { ….. }  24
  25. 25. 25
  26. 26. Exceptions const int DivideByZero = 10; double divide(double x, double y) { if(y==0) { throw DivideByZero; } return x/y; } int main() { try { divide(10, 0); } catch(int i) { if(i==DivideByZero) { cout<<"Divide by zero error"; } cin.get(); }} Output:Divide by zero error 26
  27. 27.             Class Aclass { Public: Class Anerror { }; Void func() { if(/*error condition*/) Throw Anerror(); } }; Int main() { Try { Aclass object1; Object1.fun(); } Catch (Aclass ::Anerror) //may cause error { //tell user about error } Return 0; } 27
  28. 28. try { //try block } catch(type1 arg) { //catch block1 } catch(type2 arg) { //catch block2 } ……. ……. catch(typeN arg) { //catch blockN } 28
  29. 29. Multiple Exceptions const int Max=3; class stack {private: int st[Max],top; public: class full {}; Class empty {}; stack() {top=-1; } void push(int var) { if(top>=Max-1) throw full(); st[++top]=var; } Int pop() {if(top<0) Throw empty(); Return st [top--]; } }; 29
  30. 30. Continued… int main() {stack s1; try { s1.push(11); s1.push(22); s1.push(33); s1.push(44); S1.pop(); s1.pop(); S1.pop(); s1.pop(); } catch(stack::full) { cout<<"exception :stack full"<<endl; } Catch(stack::empty) { Cout<<“exception: stack empty”<<endl; } cin.get(); } 30
  31. 31. class Distance { private: int feet; float inches; public: class InchesEx { }; Distance() { feet = 0; inches = 0.0; } Distance(int ft, float in) { if(in >= 12.0) throw InchesEx(); feet = ft; inches = in; } void getdist() { cout << "nEnter feet: "; cin >> feet; cout << "Enter inches: "; cin >> inches; if(inches >= 12.0) throw InchesEx(); } void showdist() { cout << feet << "’-" << inches; } }; 31
  32. 32. Continued… int main() { try { Distance dist1(17, 3.5); Distance dist2; dist2.getdist(); cout << "ndist1 = "; dist1.showdist(); cout << "ndist2 = "; dist2.showdist(); } catch(Distance::InchesEx) { cout << "nInitialization error: "; cout<< "inches value is too large."; } cout << endl; return 0; } 32
  33. 33. class Distance { private: int feet; float inches; public: class InchesEx { public: string origin; float iValue; InchesEx(string or, float in) { origin = or; iValue = in; } }; Distance() { feet = 0; inches = 0.0; } Distance(int ft, float in) { if(in >= 12.0) throw InchesEx("2-arg constructor", in); feet = ft; inches = in; } void getdist() { cout << "nEnter feet: "; cin >> feet; cout << "Enter inches: "; cin >> inches; 33
  34. 34. Continued… if(inches >= 12.0) throw InchesEx("getdist() function", inches); } void showdist() { cout << feet << "’-" << inches; } }; void main() { try { Distance dist1(17, 3.5); Distance dist2; dist2.getdist(); cout << "ndist1 = "; dist1.showdist(); cout << "ndist2 = "; dist2.showdist(); } catch(Distance::InchesEx ix) { cout << "nInitialization error in " << ix.origin << ".n Inches value of " << ix.iValue << " is too large."; } 34
  35. 35. class InchesEx { public: string origin; float iValue; InchesEx(string or, float in) { origin = or; iValue = in; } }; 35
  36. 36.  Extracting data from the exception object int main() { const unsigned long SIZE = 10000; char* ptr; try { ptr = new char[SIZE]; } catch(bad_alloc) { cout << “nbad_alloc exception: can’t allocate memory.n”; return(1); } delete[] ptr; //deallocate memory cout << “nMemory use is successful.n”; return 0; } 36
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×