C++ Tutorial: Some Lab assignments on Operator Overloading
Question:Write a class to store x, y, and z coordinates of a point in three-dimensional space. Using operator overloading, write friend functions to add, and subtract the vectors.
Solution:
#include<iostream>
using namespace std;
class dimension
{
private:
float xco, yco, zco;
public:
dimension():xco(0),yco(0),zco(0){}
void getco_ordinate();
friend dimension operator +(dimension, dimension);
friend dimension operator -(dimension, dimension);
void display(){cout<<"("<< xco<<" , "<<yco<< " , "<<zco<<")";}
};
void dimension::getco_ordinate()
{
cout<<"Enter the x-coordinate: ";
cin>>xco;
cout<<"Enter the y-coordinate: ";
cin>>yco;
cout<<"Enter the z-coordinate: ";
cin>>zco;
}
dimension operator +(dimension d1, dimension d2 )
{
dimension temp;
temp.xco = d1.xco + d2.xco;
temp.yco = d1.yco + d2.yco;
temp.zco = d1.zco + d2.zco;
return temp; //nameless object
}
dimension operator -(dimension d1, dimension d2)
{
dimension temp;
temp.xco = d1.xco - d2.xco;
temp.yco = d1.yco - d2.yco;
temp.zco = d1.zco - d2.zco;
return temp;
}
int main()
{
dimension d1, d2, d3, d4;
d1.getco_ordinate();
d2.getco_ordinate();
d1.display();
cout<<" + or - ";
d2.display();
d3 = d1 + d2;
d4 = d1 - d2;
cout<<" = ";
d3.display();
cout<<" or ";
d4.display();
return 0;
}
Question:Compare the two object that contains integer values that demonstrate the overloading of equality (= =), less than (<), greater than (>), not equal (!=),greater than or equal to (>=) and less than or equal to(<=) operators.
Solution:
using namespace std;
class logical
{
private:
int x;
public:
logical():x(0){}
logical(int x1):x(x1){}
bool operator == (logical);
bool operator < (logical);
bool operator > (logical);
bool operator != (logical);
bool operator >= (logical);
bool operator <= (logical);
void display()
{
cout<<x;
}
};
bool logical::operator == (logical c1)
{
if(x == c1.x)
return true;
else
return false;
}
bool logical::operator < (logical c1)
{
if(x < c1.x)
return true;
else
return false;
}
bool logical::operator > (logical c1)
{
if(x > c1.x)
return true;
else
return false;
}
bool logical::operator != (logical c1)
{
if(x != c1.x)
return true;
else
return false;
}
bool logical::operator <= (logical c1)
{
if(x <= c1.x)
return true;
else
return false;
}
bool logical::operator >= (logical c1)
{
if(x >= c1.x)
return true;
else
return false;
}
int main()
{
int x, y;
cout<<"Enter Value of X: ";
cin>>x;
cout<<"Enter the value of Y: ";
cin>>y;
logical l1(x), l2(y);
if(l1 == l2)
cout<<"Both objects are equal "<<endl;
if(l1 < l2)
cout<<"Oject 1 is less than object 2"<<endl;
if(l1 > l2)
cout<<"Oject 1 is greater than object 2"<<endl;
if(l1!=l2)
cout<<"Object 1 is not equal to object 2"<<endl;
if(l1 <= l2)
cout<<"Object 1 is less than or equal to object 2"<<endl;
if(l1 >= l2)
cout<<"Object 1 is greater than or equal to object 2"<<endl;
return 0;
}
#include <iostream>
using namespace std;
class Date
{
private:
int day;
int month;
int year;
static const int days[];
static const char months[][12];
public:
Date(int d = 1 , int m = 1, int yy = 2000);
void setDate(int, int , int);
Date operator ++ ();
Date operator ++(int );
bool check_leapyear(int );
bool check_endofmonth(int );
void helpIncrement();
void display()
{
cout<<day<<" "<<months[month-1]<<" "<<year;
}
};
const int Date::days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
const char Date::months[][12] = { "January, ", "Fabruary", "March", "April", "May","June","July","August","September", "October", "November", "December"};
Date::Date(int m, int d, int y)
{
setDate(m, d, y);
}
void Date::setDate(int mm , int dd, int yy)
{
month = ( mm >= 1 && mm <= 12 ) ? mm : 1;
year = ( yy >= 1900 && yy <= 2100 ) ? yy : 1900;
if ( month == 2 && check_leapyear(year ))
day = ( dd >= 1 && dd <= 29 ) ? dd : 1;
else
day = ( dd >= 1 && dd <= days[ month ] ) ? dd : 1;
}
void Date::helpIncrement()
{
if(!check_endofmonth(day))
day++;
else
if(month < 12)
{
month++;
day =1;
}
else
{
year++;
month = 1;
day = 1;
}
}
Date Date::operator++()
{
Date temp;
helpIncrement();
temp.day = this->day;
temp.month = this->month;
temp.year = this->year;
return temp;
}
Date Date::operator++(int)
{
Date temp;
temp.day = day;
temp.month = month;
temp.year = year;
helpIncrement();
return temp;
}
bool Date::check_leapyear( int testYear )
{
if ( testYear % 400 == 0 ||
( testYear % 100 != 0 && testYear % 4 == 0 ) )
return true;
else
return false;
}
bool Date::check_endofmonth( int testDay )
{ if ( month == 2 && check_leapyear( year ) )
return testDay == 29;
else
return testDay == days[ month ];
}
int main()
{
Date d1;
Date d2( 2, 28, 1992 ),d4(2 ,28, 1992), d5,d6;
cout <<"The given date is ";
d2.display();
cout<<endl;
d5 = d2++;
cout<<"The date after overloading pre ++, is ";
d5.display();
cout<<endl;
d6 = ++d4;
cout<<"The date after overloading post ++, is ";
d6.display();
return 0;
}

Thanks for sharing this information.