Mega Code Archive

 
Categories / C# Tutorial / Operator Overload
 

A better way to overload !, , and & for TwoDimension

This version automatically enables the && and || operators. using System;        class TwoDimension {      int x, y;       public TwoDimension() {       x = y = 0;    }      public TwoDimension(int i, int j) {       x = i;       y = j;   }        // Overload | for short-circuit evaluation.      public static TwoDimension operator |(TwoDimension op1, TwoDimension op2)      {       if( ((op1.x != 0) || (op1.y != 0) ) |         ((op2.x != 0) || (op2.y != 0)) )        return new TwoDimension(1, 1);        else          return new TwoDimension(0, 0);      }        // Overload & for short-circuit evaluation.      public static TwoDimension operator &(TwoDimension op1, TwoDimension op2)      {        if( ((op1.x != 0) && (op1.y != 0)) &         ((op2.x != 0) && (op2.y != 0) ) )        return new TwoDimension(1, 1);        else          return new TwoDimension(0, 0);      }        // Overload !.      public static bool operator !(TwoDimension op)      {        if(op) return false;        else return true;      }        // Overload true.      public static bool operator true(TwoDimension op) {      if((op.x != 0) || (op.y != 0))        return true; // at least one coordinate is non-zero      else        return false;    }        // Overload false.    public static bool operator false(TwoDimension op) {      if((op.x == 0) && (op.y == 0))        return true; // all coordinates are zero      else        return false;    }        // Show X, Y   public void show()      {        Console.WriteLine(x + ", " + y);      }    }        class MainClass {      public static void Main() {        TwoDimension a = new TwoDimension(5, 6);        TwoDimension b = new TwoDimension(10, 10);        TwoDimension c = new TwoDimension(0, 0);            Console.Write("Here is a: ");        a.show();        Console.Write("Here is b: ");        b.show();        Console.Write("Here is c: ");        c.show();        Console.WriteLine();            if(a) {        Console.WriteLine("a is true.");      }          if(b) {         Console.WriteLine("b is true.");      }          if(c) {         Console.WriteLine("c is true.");      }            if(!a) {        Console.WriteLine("a is false.");      }     if(!b) {        Console.WriteLine("b is false.");      }     if(!c) {        Console.WriteLine("c is false.");      }       Console.WriteLine();        Console.WriteLine("Use & and |");      if(a & b)         Console.WriteLine("a & b is true.");      else         Console.WriteLine("a & b is false.");        if(a & c)         Console.WriteLine("a & c is true.");      else         Console.WriteLine("a & c is false.");        if(a | b)         Console.WriteLine("a | b is true.");      else         Console.WriteLine("a | b is false.");        if(a | c)         Console.WriteLine("a | c is true.");      else         Console.WriteLine("a | c is false.");        Console.WriteLine();        // now use short-circuit ops      Console.WriteLine("Use short-circuit && and ||");      if(a && b)          Console.WriteLine("a && b is true.");      else          Console.WriteLine("a && b is false.");        if(a && c)          Console.WriteLine("a && c is true.");      else          Console.WriteLine("a && c is false.");        if(a || b)          Console.WriteLine("a || b is true.");      else          Console.WriteLine("a || b is false.");        if(a || c)          Console.WriteLine("a || c is true.");      else          Console.WriteLine("a || c is false.");    }    } Here is a: 5, 6 Here is b: 10, 10 Here is c: 0, 0 a is true. b is true. c is false. Use & and | a & b is true. a & c is false. a | b is true. a | c is true. Use short-circuit && and || a && b is true. a && c is false. a || b is true. a || c is true.