Overload shift operator

/*
C#: The Complete Reference
by Herbert Schildt

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/

// Overload < and >.

using System;

// A three-dimensional coordinate class.

class ThreeD {
int x, y, z; // 3-D coordinates

public ThreeD() { x = y = z = 0; }
public ThreeD(int i, int j, int k) { x = i; y = j; z = k; }

// Overload <. public static bool operator <(ThreeD op1, ThreeD op2) { if((op1.x < op2.x) && (op1.y < op2.y) && (op1.z < op2.z)) return true; else return false; } // Overload >.
public static bool operator >(ThreeD op1, ThreeD op2)
{
if((op1.x > op2.x) && (op1.y > op2.y) && (op1.z > op2.z))
return true;
else
return false;
}

// Show X, Y, Z coordinates.
public void show()
{
Console.WriteLine(x + “, ” + y + “, ” + z);
}
}

public class ThreeDDemo4 {

public static void Main() {
ThreeD a = new ThreeD(5, 6, 7);
ThreeD b = new ThreeD(10, 10, 10);
ThreeD c = new ThreeD(1, 2, 3);

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 > c) Console.WriteLine(“a > c is true”);
if(a < c) Console.WriteLine("a < c is true"); if(a > b) Console.WriteLine(“a > b is true”);
if(a < b) Console.WriteLine("a < b is true"); } } [/csharp]

Overload the + for object + object, object + int, and int + object


   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


/* Overload the + for object + object, 
   object + int, and int + object. */ 
 
using System; 
 
// A three-dimensional coordinate class. 
class ThreeD { 
  int x, y, z; // 3-D coordinates   
 
  public ThreeD() { x = y = z = 0; } 
  public ThreeD(int i, int j, int k) { x = i; y = j; z = k; } 
 
  // Overload binary + for object + object. 
  public static ThreeD operator +(ThreeD op1, ThreeD op2) 
  { 
    ThreeD result = new ThreeD(); 
 
    /* This adds together the coordinates of the two points 
       and returns the result. */ 
    result.x = op1.x + op2.x;  
    result.y = op1.y + op2.y;  
    result.z = op1.z + op2.z;  
 
    return result; 
  } 
 
  // Overload binary + for object + int. 
  public static ThreeD operator +(ThreeD op1, int op2) 
  { 
    ThreeD result = new ThreeD(); 
 
    result.x = op1.x + op2; 
    result.y = op1.y + op2; 
    result.z = op1.z + op2; 
 
    return result; 
  } 
 
  // Overload binary + for int + object. 
  public static ThreeD operator +(int op1, ThreeD op2) 
  { 
    ThreeD result = new ThreeD(); 
 
    result.x = op2.x + op1; 
    result.y = op2.y + op1; 
    result.z = op2.z + op1; 
 
    return result; 
  } 
 
  // Show X, Y, Z coordinates. 
  public void show() 
  { 
    Console.WriteLine(x + ", " + y + ", " + z); 
  } 
} 
 
public class ThreeDDemo3 { 
  public static void Main() { 
    ThreeD a = new ThreeD(1, 2, 3); 
    ThreeD b = new ThreeD(10, 10, 10); 
    ThreeD c = new ThreeD(); 
 
    Console.Write("Here is a: "); 
    a.show(); 
    Console.WriteLine(); 
    Console.Write("Here is b: "); 
    b.show(); 
    Console.WriteLine(); 
 
    c = a + b; // object + object 
    Console.Write("Result of a + b: "); 
    c.show(); 
    Console.WriteLine(); 
 
    c = b + 10; // object + int 
    Console.Write("Result of b + 10: "); 
    c.show(); 
    Console.WriteLine(); 
 
    c = 15 + b; // int + object 
    Console.Write("Result of 15 + b: "); 
    c.show(); 
  } 
}


           
          


Overload addition for object + object, and for object + int


   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


/* Overload addition for object + object, and 
   for object + int. */ 
 
using System; 
 
// A three-dimensional coordinate class. 
class ThreeD { 
  int x, y, z; // 3-D coordinates   
 
  public ThreeD() { x = y = z = 0; } 
  public ThreeD(int i, int j, int k) { x = i; y = j; z = k; } 
 
  // Overload binary + for object + object. 
  public static ThreeD operator +(ThreeD op1, ThreeD op2) 
  { 
    ThreeD result = new ThreeD(); 
 
    /* This adds together the coordinates of the two points 
       and returns the result. */ 
    result.x = op1.x + op2.x;  
    result.y = op1.y + op2.y;  
    result.z = op1.z + op2.z;  
 
    return result; 
  } 
 
  // Overload binary + for object + int. 
  public static ThreeD operator +(ThreeD op1, int op2) 
  { 
    ThreeD result = new ThreeD(); 
 
    result.x = op1.x + op2; 
    result.y = op1.y + op2; 
    result.z = op1.z + op2; 
 
    return result; 
  } 

  // Show X, Y, Z coordinates. 
  public void show() 
  { 
    Console.WriteLine(x + ", " + y + ", " + z); 
  } 
} 
 
public class ThreeDDemo2 { 
  public static void Main() { 
    ThreeD a = new ThreeD(1, 2, 3); 
    ThreeD b = new ThreeD(10, 10, 10); 
    ThreeD c = new ThreeD(); 
 
    Console.Write("Here is a: "); 
    a.show(); 
    Console.WriteLine(); 
    Console.Write("Here is b: "); 
    b.show(); 
    Console.WriteLine(); 
 
    c = a + b; // object + object 
    Console.Write("Result of a + b: "); 
    c.show(); 
    Console.WriteLine();
 
    c = b + 10; // object + int 
    Console.Write("Result of b + 10: "); 
    c.show(); 
  } 
}


           
          


More operator overloading


   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


// More operator overloading. 
 
using System; 
 
// A three-dimensional coordinate class. 
class ThreeD { 
  int x, y, z; // 3-D coordinates   
 
  public ThreeD() { x = y = z = 0; } 
  public ThreeD(int i, int j, int k) { x = i; y = j; z = k; } 
 
  // Overload binary +. 
  public static ThreeD operator +(ThreeD op1, ThreeD op2) 
  { 
    ThreeD result = new ThreeD(); 
 
    /* This adds together the coordinates of the two points 
       and returns the result. */ 
    result.x = op1.x + op2.x;  
    result.y = op1.y + op2.y;  
    result.z = op1.z + op2.z;  
 
    return result; 
  } 
 
  // Overload binary -. 
  public static ThreeD operator -(ThreeD op1, ThreeD op2) 
  { 
    ThreeD result = new ThreeD(); 
 
    /* Notice the order of the operands. op1 is the left 
       operand and op2 is the right. */ 
    result.x = op1.x - op2.x;  
    result.y = op1.y - op2.y;  
    result.z = op1.z - op2.z;  
 
    return result; 
  } 
   
  // Overload unary -. 
  public static ThreeD operator -(ThreeD op) 
  { 
    ThreeD result = new ThreeD(); 
 
    result.x = -op.x; 
    result.y = -op.y;  
    result.z = -op.z;  
 
    return result; 
  } 
 
  // Overload unary ++. 
  public static ThreeD operator ++(ThreeD op) 
  { 
    // for ++, modify argument 
    op.x++; 
    op.y++;  
    op.z++;  
 
    return op; 
  } 
 
  // Show X, Y, Z coordinates. 
  public void show() 
  { 
    Console.WriteLine(x + ", " + y + ", " + z); 
  } 
} 
 
public class ThreeDDemo1 { 
  public static void Main() { 
    ThreeD a = new ThreeD(1, 2, 3); 
    ThreeD b = new ThreeD(10, 10, 10); 
    ThreeD c = new ThreeD(); 
 
    Console.Write("Here is a: "); 
    a.show(); 
    Console.WriteLine(); 
    Console.Write("Here is b: "); 
    b.show(); 
    Console.WriteLine(); 
 
    c = a + b; // add a and b together 
    Console.Write("Result of a + b: "); 
    c.show(); 
    Console.WriteLine(); 
 
    c = a + b + c; // add a, b and c together 
    Console.Write("Result of a + b + c: "); 
    c.show(); 
    Console.WriteLine(); 
 
    c = c - a; // subtract a 
    Console.Write("Result of c - a: "); 
    c.show(); 
    Console.WriteLine(); 
 
    c = c - b; // subtract b 
    Console.Write("Result of c - b: "); 
    c.show(); 
    Console.WriteLine(); 
 
    c = -a; // assign -a to c 
    Console.Write("Result of -a: "); 
    c.show(); 
    Console.WriteLine(); 
 
    a++; // increment a 
    Console.Write("Result of a++: "); 
    a.show();   
  } 
}


           
          


An example of operator overloading


   

/*
C#: The Complete Reference 
by Herbert Schildt 

Publisher: Osborne/McGraw-Hill (March 8, 2002)
ISBN: 0072134852
*/


// An example of operator overloading. 
 
using System; 
 
// A three-dimensional coordinate class. 
class ThreeD { 
  int x, y, z; // 3-D coordinates   
 
  public ThreeD() { x = y = z = 0; } 
  public ThreeD(int i, int j, int k) { x = i; y = j; z = k; } 
 
  // Overload binary +. 
  public static ThreeD operator +(ThreeD op1, ThreeD op2) 
  { 
    ThreeD result = new ThreeD(); 
 
    /* This adds together the coordinates of the two points 
       and returns the result. */ 
    result.x = op1.x + op2.x; // These are integer additions 
    result.y = op1.y + op2.y; // and the + retains its original 
    result.z = op1.z + op2.z; // meaning relative to them. 
 
    return result; 
  } 
 
  // Overload binary -. 
  public static ThreeD operator -(ThreeD op1, ThreeD op2) 
  { 
    ThreeD result = new ThreeD(); 
 
    /* Notice the order of the operands. op1 is the left 
       operand and op2 is the right. */ 
    result.x = op1.x - op2.x; // these are integer subtractions 
    result.y = op1.y - op2.y;  
    result.z = op1.z - op2.z;  
 
    return result; 
  } 
   
  // Show X, Y, Z coordinates. 
  public void show() 
  { 
    Console.WriteLine(x + ", " + y + ", " + z); 
  } 
} 
 
public class ThreeDDemo { 
  public static void Main() { 
    ThreeD a = new ThreeD(1, 2, 3); 
    ThreeD b = new ThreeD(10, 10, 10); 
    ThreeD c = new ThreeD(); 
 
    Console.Write("Here is a: "); 
    a.show(); 
    Console.WriteLine(); 
    Console.Write("Here is b: "); 
    b.show(); 
    Console.WriteLine(); 
 
    c = a + b; // add a and b together 
    Console.Write("Result of a + b: "); 
    c.show(); 
    Console.WriteLine(); 
 
    c = a + b + c; // add a, b and c together 
    Console.Write("Result of a + b + c: "); 
    c.show(); 
    Console.WriteLine(); 
 
    c = c - a; // subtract a 
    Console.Write("Result of c - a: "); 
    c.show(); 
    Console.WriteLine(); 
 
    c = c - b; // subtract b 
    Console.Write("Result of c - b: "); 
    c.show(); 
    Console.WriteLine(); 
  } 
}


           
          


Pass by ref for object parameters

   
 


using System;
using System.Collections.Generic;
using System.Text;

class Pass {
    public static void Value(ref int param) {
        param = 42;
    }

    public static void Reference(WrappedInt param) {
        param.Number = 42;
    }
}
class WrappedInt {
    public int Number;
}

class Program {
    static void Entrance() {
        int i = 0;
        Console.WriteLine(i);
        Pass.Value(ref i);
        Console.WriteLine(i);

        WrappedInt wi = new WrappedInt();
        Console.WriteLine(wi.Number);
        Pass.Reference(wi);
        Console.WriteLine(wi.Number);
    }

    static void Main(string[] args) {
        try {
            Entrance();
        } catch (Exception ex) {
            Console.WriteLine(ex.Message);
        }
    }
}

    


Point object

   
 

using System;
using System.Collections.Generic;
using System.Text;
class Point {
    public Point() {
        this.x = -1;
        this.y = -1;
        objectCount++;
    }

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
        objectCount++;
    }

    public double DistanceTo(Point other) {
        int xDiff = this.x - other.x;
        int yDiff = this.y - other.y;
        return Math.Sqrt((xDiff * xDiff) + (yDiff * yDiff));
    }

    public static int ObjectCount() {
        return objectCount;
    }

    private int x, y;
    private static int objectCount = 0;
}
class Program {
    static void Main(string[] args) {
        try {
            Point origin = new Point();
            Point bottomRight = new Point(1024, 1280);
            double distance = origin.DistanceTo(bottomRight);
            Console.WriteLine("Distance is {0}", distance);
            Console.WriteLine("No of Point objects: {0}", Point.ObjectCount());
        } catch (Exception ex) {
            Console.WriteLine(ex.Message);
        }
    }
}