C++: a beginner's Guide, Second Edition



Download 11,33 Mb.
Pdf ko'rish
bet170/194
Sana12.03.2022
Hajmi11,33 Mb.
#491693
1   ...   166   167   168   169   170   171   172   173   ...   194
Bog'liq
C A Beginner\'s Guide 2nd Edition (2003)

1.
 
In the language of C++, what is an exception?
2.
 
Exception handling is based on what three keywords?
3.
 
An exception is caught based on its type. True or false?
Using Multiple catch Statements
As stated earlier, you can associate more than one catch statement with a try. In fact, it is common to do 
so. However, each catch must catch a different type of exception. For example, the program shown next 
catches both integers and character pointers.



C++ A Beginner’s Guide by Herbert Schildt 
In general, catch expressions are checked in the order in which they occur in a program. Only a matching 
statement is executed. All other catch blocks are ignored.
Catching Base Class Exceptions
There is one important point about multiple catch statements that relates to derived classes. A catch 
clause for a base class will also match any class derived from that base. Thus, if you want to catch 
exceptions of both a base class type and a derived class type, put the derived class first in the catch 
sequence. If you don’t, the base class catch will also catch all derived classes. For example, consider the 
following program:



C++ A Beginner’s Guide by Herbert Schildt 
Here, because derived is an object that has B as a base class, it will be caught by the first catch clause
and the second clause will never execute. Some compilers will flag this condition with a warning 
message. Others may issue an error message and stop compilation. Either way, to fix this condition, 
reverse the order of the catch clauses.
Catching All Exceptions
In some circumstances, you will want an exception handler to catch all exceptions instead of just a 
certain type. To do this, use this form of catch:
catch(...) { // process all exceptions }
Here, the ellipsis matches any type of data. The following program illustrates catch(...):


10 
C++ A Beginner’s Guide by Herbert Schildt 
This program displays the following output:
start
Caught One!
Caught One!
Caught One!
end
Xhandler( ) throws three types of exceptions: int, char, and double. All are caught using the catch(...) 
statement.
One very good use for catch(...) is as the last catch of a cluster of catches. In this capacity, it provides a 
useful default or “catch all” statement. Using catch(...) as a default is a good way to catch all exceptions 
that you don’t want to handle explicitly. Also, by catching all exceptions, you prevent an unhandled 
exception from causing an abnormal program termination.
Specifying Exceptions Thrown by a Function
You can specify the type of exceptions that a function can throw outside of itself. In fact, you can also 
prevent a function from throwing any exceptions whatsoever. To accomplish these restrictions, you 
must add a throw clause to a function definition. The general form of this clause is


11 
C++ A Beginner’s Guide by Herbert Schildt 
ret-type func-name(arg-list) throw(type-list) { // ... }
Here, only those data types contained in the comma-separated type-list can be thrown by the function. 
Throwing any other type of expression will cause abnormal program termination. If you don’t want a 
function to be able to throw any exceptions, then use an empty list.
NOTE: 
At the time of this writing, Visual C++ does not actually prevent a function from throwing an exception 
type that is not specified in the throw clause. This is nonstandard behavior. You can still specify a throw clause, but 
such a clause is informational only.
The following program shows how to specify the types of exceptions that can be thrown from a 
function:


12 
C++ A Beginner’s Guide by Herbert Schildt 
In this program, the function Xhandler( ) can only throw integer, character, and double exceptions. If it 
attempts to throw any other type of exception, then an abnormal program termination will occur. To 
see an example of this, remove int from the list and retry the program. An error will result. (As 
mentioned, currently Visual C++ does not restrict the exceptions that a function can throw.)
It is important to understand that a function can only be restricted in what types of exceptions it throws 
back to the try block that has called it. That is, a try block within a function can throw any type of 
exception, as long as the exception is caught within that function. The restriction applies only when 
throwing an exception outside of the function.
Rethrowing an Exception
You can rethrow an exception from within an exception handler by calling throw by itself, with no 
exception. This causes the current exception to be passed on to an outer try/catch sequence. The most 
likely reason for calling throw this way is to allow multiple handlers access to the exception. For 
example, perhaps one exception handler manages one aspect of an exception, and a second handler 
copes with another aspect. An exception can only be rethrown from within a catch block (or from any 
function called from within that block). When you rethrow an exception, it will not be recaught by the 
same catch statement. It will propagate to the next catch statement. The following program illustrates 
rethrowing an exception. It rethrows a char * exception.


13 
C++ A Beginner’s Guide by Herbert Schildt 
This program displays the following output:
start
Caught char * inside Xhandler
Caught char * inside main
End 

Download 11,33 Mb.

Do'stlaringiz bilan baham:
1   ...   166   167   168   169   170   171   172   173   ...   194




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish