# Overload the + for object + object, object + int, and int + object : Operator Overloading « Class Interface « C# / C Sharp

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();
}
}

```