Operator overloading is one of the good feature of Object Oriented Programming.C# supports the operator overloading concepts.Operators in C# can be defined to work with the user-defined data types such as structs and classes .It Works the same way as the Built in types.
There are some operators in C# that can be overloaded.
There are some operators in C# that can be overloaded.
- Overloadable operators
- Non Overloadable operators
1. ) Overloadable operators:-
Operators that can be overloaded in c# as shown below:
2.) Non Overloadable operators:-
Operators that can be overloaded in C# as shown below:
Note:- Logical operators must be overloaded in pairs.Ex.==,!= etc.
- Binary operators and its compound assignment equivalent is implicitly overloaded.
- The operators that are not defined in C# can not overloaded.
Need for Operator overloading:-
There are some places where mostly operators overloading are used.
- Mathematical or Physical modeling
- Graphical programs
- Text manipulations
- Financial programs etc.
Defining Operator Overloading:-
This is done with the help of special method called operator method ,which describe the task.The operator is defined in such a way as a Method,we use Operator keyword to define the operator method.
There are some feature of operators methods which is give below:
- It can be public or static.
- The return value is the type that can be any type.
- In Unary operators ,the argument must be the same type as that of the enclosing class or struct.
- The Number of arguments will be one for the Unary operators and two for the binary operators.
- In binary operators,First argument must be of the same type as that of the enclosing class or struct and second can be of any type.
Example:
Unary minus:
Public static bank operator -(bank b)
Vector addition(Binary operator)
Public static Vector operator -(Vector x ,Vector y)
Comparison Operator
Public Static Vector operator ==(Vector x,Vector y)
Description:-
Vector is a Data type of class that represent magnitude and direction both.
There are some steps ,Process of Overloading in C#.
- Create a class or struct that defines the Data type that can be used in the overloading operations.
- Declare the operator Method operator - () Using public and static specifier.
- Define the body of the operator method to implement the required operations.
There are three types of Overloading in C#.
- Unary operators overloading
- Binary operators overloading
- Comparison operators overloading
1. ) Unary operators overloading:-
I have shown how to overload an Unary Operator in given example which is shown below:
using System;
class bank
{
int x;
int y;
public bank(int a, int b)
{
x = a;
y = b;
}
public bank()
{
}
public void display()
{
Console.Write(" " + x);
Console.Write(" " + y);
Console.WriteLine();
}
public static bank operator -(bank b)
{
b.x = -b.x;
b.y = -b.y;
return b;
}
}
class program
{
public static void Main()
{
bank ba1 = new bank(10,-20);
ba1.display();
bank ba2 = new bank();
ba2.display();
ba2 = -ba1;
ba2.display();
Console.ReadLine();
}
}
Output:-Description:-
In above program ,the method operator -() takes one argument of type bank and changes the sign of data members of the object b ,since b is a member of the same class ,so it can directly access the members of the object which activate it.since operator method return an object so this statement ba2 == - ba1 is true.If Method does not return any object then it will not true.
2. ) Binary Operators Overloading:-
In above example we we have seen how to overload an Unary operator in C#.We can use same Mechanism to overload binary the Binary operators in C#.
using System;
namespace binary_overload
{
class complexNumber
{
int x;
double y;
public complexNumber(int real, double imagnary)
{
x = real;
y = imagnary;
}
public complexNumber()
{
}
public static complexNumber operator + (complexNumber c1, complexNumber c2)
{
complexNumber c = new complexNumber();
c.x=c1.x+c2.x;
c.y=c1.x-c2.y;
return c;
}
public void show()
{
Console.Write(x);
Console.Write("+j"+y);
Console.WriteLine();
}
}
class Program
{
static void Main(string[] args)
{
complexNumber p, q, r;
p = new complexNumber(10, 2.0);
q = new complexNumber(20, 15.5);
r = p + q;
Console.Write("p=");
p.show();
Console.Write("q=");
q.show();
Console.Write("r=");
r.show();
Console.ReadLine();
}
}
}
Output:
Note:-
The Method operator + () takes two argument (ComplexNumber) and add the two object in same class.
3. ) Comparison Operators Overloading:-
There are six comparison operators that can be considered in three pairs:
- == and !=
- < and <=
- > and >=
The Significance of these two pairing:
- Each pair ,the second operator should always give exactly the opposite result to the first.
- We must require us to overload the comparison operators in pairs.
using System;
namespace comparison
{
class Vector
{
int x, y, z;
public Vector(int p, int q, int r)
{
x = p;
y = q;
z = r;
}
public static bool operator ==(Vector v1, Vector v2)
{
if (v1.x == v2.x && v1.y == v2.y && v1.z == v2.z)
return (true);
else
return (false);
}
public static bool operator !=(Vector v1, Vector v2)
{
return (!(v1 == v2));
}
}
class comparison
{
static void Main()
{
Vector v1 = new Vector(10, 20, 30);
Vector v2 = new Vector(40, 50, 60);
if (v1 == v2)
Console.WriteLine("v1 and v2 both are Equal");
else
Console.WriteLine("v1 and v2 are not equal");
Console.ReadLine();
}
}
}
Note:-
Comparison operators must return a bool type value. But other operators (Unary,Binary) can return any type of value.
For more:-
To Get the Latest Free Updates Subscribe
download attached whole Application
Download
For more:-
- Method overloading
- Method overiding
- Method Hiding
- oops
- Interface
- Delegate
- Event
- Reflection concepts
- File and File info class concepts
- Real File handling concepts with example
- Collection concepts in c#
- Directory and Directory info class in c#
To Get the Latest Free Updates Subscribe
download attached whole Application
Download
Nice post
ReplyDelete