SlideShare a Scribd company logo
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 that they can handle arguments and
return value of different types.

5
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
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 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
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
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
Class

template definition does not

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

11
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
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;
}
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
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
Continued…

int Basket<int>::Big()
{
return (first > second?first:second);
}
float Basket<float>::Big()
{
return (first > second?first:second);
}
16
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
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
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
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






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


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




Used to indicate that an exception has occurred
Will be caught by closest exception handler
Syntax:if ( // error)
{
Throw error();
}

23
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
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
















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
try
{
//try block
}
catch(type1 arg)
{
//catch block1
}
catch(type2 arg)
{
//catch block2
}

…….
…….
catch(typeN arg)
{
//catch blockN
}

28
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
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
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
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
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
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
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 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

More Related Content

PDF
Inheritance and polymorphism
PDF
c programming
PDF
Polymorphism
PDF
Notes for C Programming for MCA, BCA, B. Tech CSE, ECE and MSC (CS) 3 of 5 b...
PPTX
Lexical environment in ecma 262 5
PDF
Notes for C++ Programming / Object Oriented C++ Programming for MCA, BCA and ...
PDF
Static and const members
PDF
Notes for C Programming for MCA, BCA, B. Tech CSE, ECE and MSC (CS) 4 of 5 by...
Inheritance and polymorphism
c programming
Polymorphism
Notes for C Programming for MCA, BCA, B. Tech CSE, ECE and MSC (CS) 3 of 5 b...
Lexical environment in ecma 262 5
Notes for C++ Programming / Object Oriented C++ Programming for MCA, BCA and ...
Static and const members
Notes for C Programming for MCA, BCA, B. Tech CSE, ECE and MSC (CS) 4 of 5 by...

What's hot (19)

PPTX
More on Classes and Objects
PDF
Hidden Gems in Swift
PDF
Notes for C Programming for MCA, BCA, B. Tech CSE, ECE and MSC (CS) 5 of 5 by...
PPTX
TDC2016POA | Trilha .NET - CQRS e ES na prática com RavenDB
PDF
3. Объекты, классы и пакеты в Java
PDF
Notes for GNU Octave - Numerical Programming - for Students - 02 of 02 by aru...
PPTX
TDC2016POA | Trilha .NET - C# como você nunca viu: conceitos avançados de pro...
PDF
Notes for C Programming for MCA, BCA, B. Tech CSE, ECE and MSC (CS) 2 of 5 by...
PPTX
TypeScript - All you ever wanted to know - Tech Talk by Epic Labs
PDF
Implementing stack
PDF
Java cheatsheet
PPT
Networking Core Concept
PPTX
DOC
C tech questions
PDF
Design Patterns
PDF
Swift 함수 커링 사용하기
PPTX
Type Driven Development with TypeScript
PDF
C programs
PDF
Stl algorithm-Basic types
More on Classes and Objects
Hidden Gems in Swift
Notes for C Programming for MCA, BCA, B. Tech CSE, ECE and MSC (CS) 5 of 5 by...
TDC2016POA | Trilha .NET - CQRS e ES na prática com RavenDB
3. Объекты, классы и пакеты в Java
Notes for GNU Octave - Numerical Programming - for Students - 02 of 02 by aru...
TDC2016POA | Trilha .NET - C# como você nunca viu: conceitos avançados de pro...
Notes for C Programming for MCA, BCA, B. Tech CSE, ECE and MSC (CS) 2 of 5 by...
TypeScript - All you ever wanted to know - Tech Talk by Epic Labs
Implementing stack
Java cheatsheet
Networking Core Concept
C tech questions
Design Patterns
Swift 함수 커링 사용하기
Type Driven Development with TypeScript
C programs
Stl algorithm-Basic types
Ad

Viewers also liked (15)

PDF
Rozmowa doradcza
DOC
Makalah jaringan-komputer
PDF
Rozmowa doradcza
PPTX
UTE "OTRAS VARIABLES QUE DETERMINAN LA DIVERSIDAD EN EL AULA"
PPTX
Pre zen ta sion
PPTX
Sistem imun
PPTX
Emoticonos
PPTX
Najpiękniejsze miejsca na świecie
PDF
Rozmowa doradcza
PPT
fungi
PPTX
UTE OTRAS VARIABLES QUE DETERMINAN LA DIVERSIDAD EN EL AULA
PDF
Rozmowa doradcza 12
PDF
Rozmowa doradcza
PDF
Sistem imun
PPT
Zalety i wady internetu
Rozmowa doradcza
Makalah jaringan-komputer
Rozmowa doradcza
UTE "OTRAS VARIABLES QUE DETERMINAN LA DIVERSIDAD EN EL AULA"
Pre zen ta sion
Sistem imun
Emoticonos
Najpiękniejsze miejsca na świecie
Rozmowa doradcza
fungi
UTE OTRAS VARIABLES QUE DETERMINAN LA DIVERSIDAD EN EL AULA
Rozmowa doradcza 12
Rozmowa doradcza
Sistem imun
Zalety i wady internetu
Ad

Similar to Presentation on template and exception (20)

PPTX
Templates
DOCX
unit 5.docx...............................
PDF
Object Oriented Programming (OOP) using C++ - Lecture 5
PPT
Exception handling and templates
PPT
UNIT III.ppt
PPT
UNIT III (2).ppt
PPTX
Object Oriented Design and Programming Unit-04
PPT
Unit iii
PPT
F6dc1 session6 c++
PPT
Templates exception handling
PPT
Lecture16
PPT
2.overview of c++ ________lecture2
PPTX
Namespaces
PPTX
C++ lectures all chapters in one slide.pptx
PPTX
C++ theory
PPTX
Multiple file programs, inheritance, templates
PPT
Basic concept of c++
PDF
EEE 3rd year oops cat 3 ans
Templates
unit 5.docx...............................
Object Oriented Programming (OOP) using C++ - Lecture 5
Exception handling and templates
UNIT III.ppt
UNIT III (2).ppt
Object Oriented Design and Programming Unit-04
Unit iii
F6dc1 session6 c++
Templates exception handling
Lecture16
2.overview of c++ ________lecture2
Namespaces
C++ lectures all chapters in one slide.pptx
C++ theory
Multiple file programs, inheritance, templates
Basic concept of c++
EEE 3rd year oops cat 3 ans

Recently uploaded (20)

PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPTX
PPH.pptx obstetrics and gynecology in nursing
PPTX
master seminar digital applications in india
PDF
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
PDF
Sports Quiz easy sports quiz sports quiz
PPTX
Lesson notes of climatology university.
PDF
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PDF
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
PPTX
Cell Types and Its function , kingdom of life
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PDF
Basic Mud Logging Guide for educational purpose
PDF
Insiders guide to clinical Medicine.pdf
PPTX
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
PPTX
Renaissance Architecture: A Journey from Faith to Humanism
PDF
Computing-Curriculum for Schools in Ghana
PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PPTX
Cell Structure & Organelles in detailed.
O7-L3 Supply Chain Operations - ICLT Program
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPH.pptx obstetrics and gynecology in nursing
master seminar digital applications in india
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
Sports Quiz easy sports quiz sports quiz
Lesson notes of climatology university.
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
human mycosis Human fungal infections are called human mycosis..pptx
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
The Lost Whites of Pakistan by Jahanzaib Mughal.pdf
Cell Types and Its function , kingdom of life
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
Basic Mud Logging Guide for educational purpose
Insiders guide to clinical Medicine.pdf
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
Renaissance Architecture: A Journey from Faith to Humanism
Computing-Curriculum for Schools in Ghana
Abdominal Access Techniques with Prof. Dr. R K Mishra
Cell Structure & Organelles in detailed.

Presentation on template and exception

  • 1. 1
  • 2. 2
  • 3. 3
  • 4. Template concept can be use in two different concepts i. Function template ii. Class template 4
  • 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. 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
  • 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. 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. 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. Class template definition does not change Class template work for variable of all types instead of single basic type 11
  • 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. 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. 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. 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. Continued… int Basket<int>::Big() { return (first > second?first:second); } float Basket<float>::Big() { return (first > second?first:second); } 16
  • 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. 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. 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. 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.     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.  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.    Used to indicate that an exception has occurred Will be caught by closest exception handler Syntax:if ( // error) { Throw error(); } 23
  • 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
  • 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.             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. try { //try block } catch(type1 arg) { //catch block1 } catch(type2 arg) { //catch block2 } ……. ……. catch(typeN arg) { //catch blockN } 28
  • 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. 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. 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. 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. 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. 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. class InchesEx { public: string origin; float iValue; InchesEx(string or, float in) { origin = or; iValue = in; } }; 35
  • 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