Operator Overload Demo : Operator Overload « Class « Visual C++ .NET






Operator Overload Demo

 

#include "stdafx.h"
using namespace System;

ref class MyClass{
public:
    MyClass() : i(0) {}
    MyClass(int x) : i(x) {}

    // x != y
    static bool operator !=(const MyClass ^lhs, const MyClass ^rhs)
    {
        return lhs->i != rhs->i;
    }

    // x * y
    static MyClass^ operator *(const MyClass ^lhs, const MyClass ^rhs)
    {
        MyClass^ ret = gcnew MyClass();
        ret->i = lhs->i * rhs->i;

        return ret;
    }

    // x *= y
    static void operator *=(MyClass ^lhs, const MyClass ^rhs)
    {
        lhs->i *= rhs->i;
    }

    // -x
    static MyClass^ operator -(const MyClass ^lhs)
    {
        MyClass^ ret = gcnew MyClass();
        ret->i = -(lhs->i);

        return ret;
    }

    // ++x and x++
    static MyClass^ operator ++(const MyClass ^lhs)
    {
        MyClass^ ret = gcnew MyClass();
        ret->i = (lhs->i) + 1;
                     
        return ret;  
    }

    virtual String ^ ToString() override
    {
        return i.ToString();
    }

private:
    int i;
};

void main()
{
    MyClass ^op1 = gcnew MyClass(3);
    MyClass ^op2 = gcnew MyClass(5);
    MyClass ^op3 = gcnew MyClass(15);

   if ( op1 * op2 != op3)
       Console::WriteLine("not Equal");
   else
       Console::WriteLine("Equal");

    op1 *= op2;
    Console::WriteLine(op1);

    Console::WriteLine(++op1);
    Console::WriteLine(op1++);

    Console::WriteLine(-op1); 
    Console::WriteLine(op1);  
}  

   
  








Related examples in the same category

1.Relational Operator Overload