Anda di halaman 1dari 6

Tugas Exception Handling

1. Std:bad_alloc
Eksepsi yang dilemparkan oleh operator new pada kasus pengalokasian
memori yang gagal(memori tidak tersedia).Kegagalan juga dapat terjadi
apabila memori yang diberi melampaui memori yang tersedia.
Contoh Program:
#include <iostream>
#include <new>
using namespace std;

int main()
{
try {
while (1) {
new int[100000000ul];
}
} catch (const bad_alloc& ba) {
cout << "Error: " << ba.what() << '\n';
}
}
Output :
2. Std:bad_cast
Eksepsi yang dilemparkan oleh dynamic_cast jika tidak berhasil.
Kegagalan terjadi karena subclass tidak memiliki inheritance dari
superclass.
Contoh Program:
#include <iostream>
#include <typeinfo>
using namespace std;

class base {
virtual void member(){}
};
class derived : base {};

int main () {
try
{
base b;
derived& rd = dynamic_cast<derived&>(b);
}
catch (bad_cast& bc)
{
cerr << "Error: " << bc.what() << '\n';
}
}
Output:
3. Std:bad_typeid
Eksepsi ini dilemparkan oleh operator typeid() jika tidak
berhasil.Kegagalan terjadi ketika terdapat suatu objek pointer yang
berasal dari class polimorfisme memberikan NULL pada pointer tersebut.
Contoh Program:
#include <iostream>
#include <typeinfo>
using namespace std;

class polimorfisme {
virtual void member(){}};

int main () {
try
{
polimorfisme * pb = 0;
cout << typeid(*pb).name();
}
catch (bad_typeid& bt)
{
cerr << "Error: " << bt.what() << '\n';
}
}
Output :
4. Std:bad_exception
Jika suatu eksepsi yang tidak terdaftar di dalam spesifikasi eksepsi
terjadi, maka eksepsi bad_exception akan dilemparkan oleh fungsi
unexpected().
Contoh Program:
#include <iostream>
#include <exception>
#include <stdexcept>
using namespace std;

void excp() { throw; }

void test() throw(bad_exception)


{
throw runtime_error("test");
}

int main()
{
set_unexpected(excp);
try {
test();
} catch(const bad_exception& e)
{
cerr << "Error: " << e.what() << '\n';
}
}
Output :
5. Std:domain_error
Eksepsi yang dilemparkan apabila ada kesalahan dalam logika
matematika seperti fungsi akar kuadrat hanya untuk angka non negatif.
Contoh Program:
#include <iostream>

#include <math.h>

using namespace std;

int main(){
double y;
cin >> y;
try{
double logaritmeE = log(x);
if(isnan(logaritmeE))
throw domain_error("domain_error");
else
cout << logaritmeE;
}catch (exception& e){
cout << "Error : " << e.what() << endl;
}
}
Output :
6. Std:invalid_argument
Eksepsi yang dilemparkan apabila terjadi pemanggilan fungsi dengan
argumen yang tidak sesuai dengan parameter fungsi. Sebagai contoh,
sebuah nilai negatif untuk akar kuadrat adalah argument yang invalid.
Contoh Program:
#include <iostream> :
#include <stdexcept>
#include <bitset>
#include <string>
using namespace std;

int main (void) {


try {
bitset<5> mybitset (string("01234"));
}
catch (const invalid_argument& ia) {
cerr << "Error: " << ia.what() << '\n';
}
}
Output :
7. Std:length_error
Mengindikasikan bahwa sebuah panjang lebih besar dari yang ditetapkan
untuk objek yang digunakan.Eksepsi yang dilemparkan apabila terjadi
upaya untuk menghasilkan objek atau variabel melebihi panjang
maksimal yang disediakan.
Contoh Program:
#include <iostream>
#include <stdexcept>
#include <vector>
using namespace std;

int main (void) {


try {
vector<int> myvector;
myvector.resize(myvector.max_size()+1);
}
catch (const length_error& le) {
cerr << "Error: " << le.what() << '\n';
}
}
Output:
8. Std:out_of_range
Mengindikasikan ketika sebuah nilai melebihi rentang nilai yang
diizinkan.
Contoh Program:
#include <iostream>
#include <stdexcept>
#include <vector>
using namespace std;

int main (void) {


vector<int> myvector(10);
try {
myvector.at(20)=100;
}
catch (const out_of_range& oor) {
cerr << "Error : " << oor.what() << '\n';
}
}
Output:
9. Std:overflow_error
Eksepsi ini berkaitan dengan sebuah nilai yang nilainya terlalu besar
untuk komputer. Eksepsi ini dilemparkan apabila terjadi kelebihan nilai
pada suatu tipe data.
Contoh Program :
#include <bitset>
#include <iostream>
using namespace std;

int main( )
{
try
{
bitset< 33 > bitset;
bitset[32] = 1;
bitset[0] = 1;
unsigned long x = bitset.to_ulong( );
}
catch ( exception &e )
{
cerr << "Error : " << typeid( e ).name( ) << endl;
};
}
Output:
10. Std:range_error
Eksepsi yang dilemparkan apabila dalam suatu perhitungan yang
dilakukan fungsi bawaan C++ akan memberikan nilai yang terlalu besar.
Contoh Program:
#include <iostream>
using namespace std;
int main()
{
try
{
throw range_error( "The range is in error!" );
}
catch (range_error &e)
{
cerr << "Error: " << typeid( e ).name( ) << endl;
};
}
Output:

11.Std:underflow_error
Eksepsi ini berkaitan dengan sebuah nilai yang nilainya terlalu kecil
untuk komputer. Underflow_error akan dilemparkan jika nilai yang
didapat dari perhitungan float atau double terlalu kecil hingga tidak dapat
diproses dengan baik oleh komputer.
Contoh Program:
#include <iostream>
#include <stdexcept>
using namespace std;

int main(){
float x,y;
cin >> x>> y;
try {
float pembagian = x/y;
cout << pembagian;
if (pembagian < 2.8026e-045){
throw underflow_error("underflow_error");
}else{
cout<< pembagian;
}
}catch (exception& e){
cout << "Error : " << e.what() << endl;
}
}
Output:

Anda mungkin juga menyukai