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;
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>
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( )
{
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: