programming-examples/c++/1_Overview/CPP Program for delete and new Operator Overloading.cpp
2019-11-15 12:59:38 +01:00

135 lines
2.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Step 1: create the class loc.
// Step 2: Declare the constructor loc .which initialize the member variables.
// Step 3: Declare the delete and new operator functions with the keyword operator.
// Step 4: Define the user specified operators behavior in operator function definitions.
// Step 5: Create the objects for the class loc.
// Step 6: Use the user defined operators for objects.
// Step 7: Monitoring the output values.
#include <iostream.h>
#include <cstlib>
#include <new>
class loc
{
int longtitude,latitude;
public :
loc()
{
longtitude=latitude=0;
}
loc (int lg,int lt)
{
longtitude=lg;
latitude=lt;
}
void show()
{
cout<< logitude << " ";
cout<< latitude <<"\n";
}
void *operator new(size_t size);
void operator delete(void *p);
void *operator new[](size_t size);
void operator delete[](void *p);
};
// new overloaded relative to loc
void *loc :: operator new(size_t size)
{
void *p;
cout<<"In overloaded new.\n";
p=malloc(size);
if(!p)
{
bad_alloc ba;
throw ba;
}
return p;
}
void loc :: operator delete (void *p)
{
cout<< "In overloaded delete. \n";
free(p);
}
//new overloaded for loc arrays.
void *loc :: operator new[](size_t size)
{
void *p;
cout<<"Using overload new[].\n";
p=malloc(size);
if(!p)
{
bad_alloc ba;
throw ba;
}
return p;
}
//delete overloaded for loc arrays.
void loc :: operator delete[](void *p)
{
cout<<"Freeing array using overloaded delete[]\n";
free(p);
}
int main()
{
loc *p1,*p2;
int i;
try
{
p1=new loc(10,20); //allocate an object
}
catch (bad_alloc xa)
{
cout<<"Allocation error for p1.\n";
return 1;
}
try
{
p2=new loc[10];
}
catch(bad_alloc xa)
{
cout<<"Allocation error for p2 .\n";
return 1;
}
p1->show();
for(i=0; i<10; i++)
p2[i].show();
delete p1;
delete [] p2;
return 0;
}
// SAMPLE INPUT AND OUTPUT:
// In overloaded new
// Using overload new[].
// 10 20
// 0 0
// 0 0
// 0 0
// 0 0
// 0 0
// 0 0
// 0 0
// 0 0
// 0 0
// 0 0
// In overloaded delete.
// Freeing array using overloaded delete.