Overloading Equality and Inequality Operators : Compare « Overload « C++

Home
C++
1.Bitset
2.Class
3.Console
4.Data Structure
5.Data Type
6.Deque
7.Development
8.File
9.Function
10.Generic
11.Language
12.List
13.Map Multimap
14.Overload
15.Pointer
16.Qt
17.Queue Stack
18.Set Multiset
19.STL Algorithms Binary search
20.STL Algorithms Heap
21.STL Algorithms Helper
22.STL Algorithms Iterator
23.STL Algorithms Merge
24.STL Algorithms Min Max
25.STL Algorithms Modifying sequence operations
26.STL Algorithms Non modifying sequence operations
27.STL Algorithms Sorting
28.STL Basics
29.String
30.Valarray
31.Vector
C / ANSI-C
C Tutorial
C++ Tutorial
Visual C++ .NET
C++ » Overload » CompareScreenshots 
Overloading Equality and Inequality Operators
  
#include <iostream>
using namespace std;
class CDate
{
private:
    int m_nDay;
    int m_nMonth;
    int m_nYear;

   void AddDays (int nDaysToAdd);
   void AddMonths (int nMonthsToAdd);
    void AddYears (int m_nYearsToAdd);

public:

    CDate (int nDay, int nMonth, int nYear)
          : m_nDay (nDay), m_nMonth (nMonth), m_nYear (nYear) {};

    void DisplayDate ()
    {
        cout << m_nDay << " / " << m_nMonth << " / " << m_nYear << endl;
    }

    // integer conversion operator
    operator int();

    // equality operator that helps with: if (mDate1 == mDate2)...
    bool operator == (const CDate& mDateObj);

    // overloaded equality operator that helps with: if (mDate == nInteger)
    bool operator == (int nDateNumber);

    // inequality operator
    bool operator != (const CDate& mDateObj);

    // overloaded inequality operator for integer types
    bool operator != (int nDateNumber);
};

CDate::operator int()
{
   return ((m_nYear * 10000(m_nMonth * 100+ m_nDay);
}

// equality operator that helps with if (mDate1 == mDate2)...
bool CDate::operator == (const CDate& mDateObj)
{
    return ( (mDateObj.m_nYear == m_nYear)
            && (mDateObj.m_nMonth == m_nMonth)
           && (mDateObj.m_nDay == m_nDay) );
}

bool CDate::operator == (int nDateNumber)
{
    return nDateNumber == (int)*this;
}

// inequality operator
bool CDate::operator != (const CDate& mDateObj)
{
    return !(this->operator== (mDateObj));
}

bool CDate::operator != (int nDateNumber)
{
    return !(this->operator == (nDateNumber));
}

void CDate::AddDays (int nDaysToAdd)
{
    m_nDay += nDaysToAdd;

   if (m_nDay > 30)
   {
       AddMonths (m_nDay / 30);

       m_nDay %= 30;    // rollover 30th -> 1st
   }
}
void CDate::AddMonths (int nMonthsToAdd)
{
   m_nMonth += nMonthsToAdd;

   if (m_nMonth > 12)
   {
       AddYears (m_nMonth / 12);

       m_nMonth %= 12;    // rollover dec -> jan
   }
}
void CDate::AddYears (int m_nYearsToAdd)
{
   m_nYear += m_nYearsToAdd;
}

int main ()
{
    CDate mDate1 (2562008);
    mDate1.DisplayDate ();

    CDate mDate2 (2352009);
    mDate2.DisplayDate ();

    if (mDate2 != mDate1)
        cout << "The two dates are not equal... As expected!" << endl;

    CDate mDate3 (2352009);
    mDate3.DisplayDate ();

    if (mDate3 == mDate2)
        cout << "mDate3 and mDate2 are evaluated as equals" << endl;

    // Get the integer equivalent of mDate3 using operator int()
    int nIntegerDate3 = mDate3;
    cout << nIntegerDate3<< endl;

    // Use overloaded operator== (for int comparison)
    if (mDate3 == nIntegerDate3)
        cout << "The integer  and mDate3 are equivalent" << endl;

    // Use overloaded operator != that accepts integers
    if (mDate1 != nIntegerDate3)
        cout << "The mDate1 is inequal to mDate3";

    return 0;
 }
  
    
  
Related examples in the same category
1. Overload the < and > Overload the  < and   >
2.Overload +, =, <, >, ==Overload +, =, <, >, ==
3.Define < operator in order to use the sort method
4.overloaded '<' operator compares two Distances
5.overloaded '==' operator compares strings
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.