Friday 8 April 2016

சி ஷார்ப்பில் ஆபரேட்டர் ஒவர்லோடிங்.



  
அறிமுகம்
பாலிமார்பிசம் என்றால் ஒரே ஆப்ஜெக்ட் ஆனது வெவ்வேறு சூழ்நிலைகளில் வெவ்வேறு முறைகளில் react செய்வது என்பதை நாம் அறிவோம்.c++ ல் ஆபரேட்டர் ஒவர் லோடிங் மூலம் பாலிமார்பிசம் நடைமுறைப் படுத்தப்பட்டது.ஜாவாவில் ஆபரேட்டர் ஒவர்லோடிங் கிடையாது.ஆனால்  சி ஷார்ப்பில் ஆபரேட்டர் ஒவர்லோடிங் உண்டு.

எப்படி உபயோகப் படுத்தலாம்?

பொதுவாக ஆபரேட்டர் ஒவர்லோடிங் என்றால் ஆபரேட்டர்களை எவ்வாறு  வேரியபிளில்களில் உபயோக படுத்துகின்றோமோ அவ்வாறே கிளாஸ் மற்றும் ஸ்ட்ரக்ட்களில் உபயோகிக்கலாம். உதாரணமாக a,b,c என்பவை வேரியபில்கள் என்றால் பின்வருமாறு உபயோகிக்கலாம்.



c=a+b;    //no error



இதே a,b,c முதலியவை ஆப்ஜெக்ட்கள் என்றால் பின் வருமாறு உபயோகிக்க முடியாது.



c=a+b      //error



மேற்கண்டவாறு உபயோகிக்க வேண்டும் என்றால் எந்த ஆபரேட்டரை உபயொகிக்கின்றோமோ அந்த ஆபரேட்டர்களுக்கு நாம் operator மெத்தட் நாம் எழுத வேண்டும்.



உதாரணமாக +ஆபரேட்டரை ஆப்ஜெக்ட்களில் உபயோக படுத்தினால் operator + என்கின்ற மெத்தடை கிளாசில் எழுதி மேலும் அதற்குண்டான

Coding ஆனதும்எழுத வேண்டும்.
ஆபரேட்டர் ஒவர்லோடிங்கிற்கான அவசியம்
    .1. கணித மற்றும் இயற்பியல் மாடல்களில் கோ ஆர்டினேட், வெக்டார்,,அணிகள்,சிக்கல் எண்கள் முதலியவற்றை உபயோக படுத்தும் போது

    2. கிராபிக்கல் நிரல்களில் அதன் கோ ஆர்டினேட்களை உபயோகிக்கும் போது.

   3. ஃபைனான்சியல் நிரல்களில் உபயோகப்படுத்தும் ;போது

   4.  டெக்ஸ்ட் மேனிபுலேசன்க:ளின் போது.


Syntax:
 Public static retval operator op(arglist)

{

//task defined

}

சில முக்கிய அம்சங்கள்:
 1, இவை public மற்றும் static ஆகவும் இருக்க வேண்டும்..

 2. ரிட்டன் மதிப்பு எந்த டேட்டா வகையாகவும் இருக்கலாம்(retval)

 3.arglist ஆனது இந்த மெத்தடிற்கு நாம் அனுப்பும் பராமீட்டர்கள் ஆகும்.

  இதன் எண்ணிக்கை unary operator என்றால் ஒன்றாகவும் binary operator என்றால் இரண்டாகவும் இருக்கும்.

எவற்றையெல்லாம் ஓவர்லோட் செய்யலாம்.
1.   .பைனரி அரித்மேட்டிக் ஆபரேட்டர்கள்(+,-,*,/,%)

2.   யுனரி அரித்மேட்டிக் ஆபரேட்டர்கள்(+,-,++,--)

3.   பைனரி பிட்வைஸ்(&,|,^,<<,>>)

4.   யுனரி பிட்வைஸ்(!,~,true,false)

5.   ரிலேசனல் ஆபரேட்டர்கள்(==,!=.<=.,>=,<.>)

.எவற்றை  ஓவர்லோட் செய்ய இயலாது.
1.     லாஜிக்கல் ஆபரேட்டர்ஸ் (&&,||)

2.    Compound assignment(+=,-=,*=./=,%=)

3.    மற்றவை([],(),=,?:,->,new, sizeof, typeof, is, as

 யுனரி ஆபரேட்டர் ஓவர்லோடிங்.


   இவை +,-,++,--,,- முதலியவற்றை ஒவர்லோட் செய்வது.


சான்று நிரல்-1:


using System;



namespace UnaryOperatorOverloading

{

    class Unary

    {

        int a, b, c;



        public Unary(int a1, int b1, int c1)

        {

            a = a1;

            b = b1;

            c = c1;



        }



        public void show()

        {

            Console.Write(" " + a);

            Console.Write(" " + b);

            Console.Write(" " + c);



        }

        public static Unary  operator -(Unary s)

        {

            s.a = -s.a;

            s.b = -s.b;

            s.c = -s.c;

            return s;

        }



    }



    class UnaryTest



    {

        static void Main(string[] args)

        {

            Unary s = new Unary(5, -10, 15);

            Console.WriteLine("s contains:");

            s.show();

           s= - s;

            Console.WriteLine("\n now s contains:");

            s.show();

            Console.ReadLine();

        }

    }

}

 வெளியீடு:
s contains:

5,-10,15

now s contains:

-5,10,-15

நிரல்-1 ன் விளக்கம்:

இதில் Unary என்கின்ற கிளாஸ் உள்ளது. இதில் a,b,c என்னும் மூன்று instance வேரியபில்கள் உள்ளன.இதன் கன்ஸ்ட்ரக்டர் a,b,c யின் மதிப்பையிருத்துகின்றது.show மெத்தட் a,b,c யின் மதிப்பை வெளியீடு செய்கின்றது.operator – என்கின்ற மெத்தட் அதற்கு அனுப்பபட்ட ஆப்ஜெக்டின் (s) இன்ஸ்டன்ஸ் மதிப்புகளை நெகட்டிவ் ஆக மாற்றுகின்றது. UnaryTest என்கின்ற கிளாஸின் உள்ளே உள்ள Main method ஆனது Unary கிளாஸிற்கு s என்னும் ஆப்ஜெக்ட் உருவாக்கப்படுகின்றது. S = -S என்னும் வரி operator – என்கின்ற மெத்தடை invoke செய்கின்றது.அந்த மெத்தட் ஆனது பெறப்பட்ட ஆப்ஜெக்டின் மதிப்புகளை நெகடிவ் செய்து அதை திருப்பி அனுப்புகின்றது. அவற்றை Main method ஆனது show மெத்தடை அழைத்து வெளியீடு செய்கின்றது.


பைனரி ஆபரேட்டர் ஒவர்லோடிங்.:

இவை +,-,*,/,% போன்ற ஆபரேடர்களை ஓவர்லோட் செய்கின்றது.


சான்று நிரல்-2


using System;



namespace BinaryOperatorOverLoad

{

    class Complex

    {

        double a;

        double b;

        public Complex()

        { }

        public Complex(double real, double imaginary)

        {

            a = real;

            b = imaginary;

        }

        public static Complex operator +(Complex c1, Complex c2)

        {

            Complex c3 = new Complex();

            c3.a = c1.a + c2.a;

            c3.b = c1.b + c2.b;

            return c3;

        }

        public void show()

        {

            Console.WriteLine(a + " + j " + b);



        }

    }



    class BinaryTest

    {

        static void Main(string[] args)

        {

            Complex x, y, z;

            x = new Complex(1.5, 2.6);

            y = new Complex(1.8, 3.5);

            z = x + y;



            Console.Write("x contains:");

            x.show ();



            Console.Write("y contains:");

            y.show ();

            Console.Write("z contains:");

            z.show ();

             Console .ReadLine ();



        }

    }

}


வெளியீடு:
X contains 1.5 + j 2.6

Y contains 1.8 + j 3.5

Z contains 3.3 + j 6.1



நிரல் 2-ன் விளக்கம்.

இதில் முதலில் complex என்னும் கிளாஸ் உள்ளது. இதனில் double டைப்பில் a,b என்னும் இரண்டு இன்ஸ்டன்ஸ் வேரியபில்கள் உள்ளன.

ஒரு டிஃபால்ட் கன்ஸ்ட்ரக்டரும் மேலும் ஒரு பராமீட்டரைஸ்டு கன்ஸ்ட்ரக்டரும் உள்ளன. இதுa,b யின் தொடக்க மதிப்பையிருத்துகின்றது. operator + என்னும் மெத்தட் Complex கிளாஸின் இரு ஆப்ஜெக்ட்களை பராமீட்டர்களாக ஏற்கின்றது .அந்த மெத்தட் ஆனது புதிதாக c3 என்னும் புதிய ஆப்ஜெக்டை உருவாக்குகின்றது.

C1 ன் a மதிப்பும் c2 ன் a மதிப்பும் கூட்டப்பட்டு c3-ன் a மதிப்பாக இருத்தப்படுகின்றது.. C1 ன் b மதிப்பும் c2 ன் b மதிப்பும் கூட்டப்பட்டு c3-ன் b மதிப்பாக இருத்தப்படுகின்றது..c3 திருப்பி அனுப்ப படுகின்றது.

Main மெத்தடின் z=x+y என்னும் ஸ்டேட்மெண்ட் ஆனது operator + என்னும் மெத்தடை invoke செய்கின்றது.அந்த மெத்தட் திருப்பி அனுப்பும்  c3 ஆப்ஜெக்ட் ஆனது z ல் assign செய்யப்படுகின்றது.

அடுத்து மூன்று(x,y,z) ஆப்ஜெக்ட்களின் மதிப்பும் வெளியீடு செய்யப்படுகின்றது.

ஒப்பீடு ஆபரேட்டர் ஒவர்லோடிங்:

இவை <,>,<=,>= ,!= போன்ற ஆபரேட்டர்களை ஒவர்லோட் செய்ய பயன்படுகின்றது.


சான்று நிரல்-3:
using System;



namespace ComparisonOperatorOverLoad

{

    class Vector

    {



        int a, b, c;



        public Vector(int a1, int b1, int c1)

        {

            a = a1;

            b = b1;

            c = c1;

        }

        public static bool operator ==(Vector v1, Vector v2)

        {

            if (v1.a == v2.a && v1.b == v2.b && v1.c == v2.c)

                return (true);

            else

                return (false);

        }

        public static bool operator !=(Vector v1,Vector v2)

        {

            return (!(v1 == v2));

        }



    }





    class VectorTest

    {

        static void Main(string[] args)

        {

            Vector v1 = new Vector(10, 20, 30);

            Vector v2 = new Vector(5, 10, 15);

            Vector v3 = new Vector(10, 20, 30);



            if (v1 == v2)

            {

                Console.WriteLine("v1 is equal to v2");



            }

            else

            {

                Console.WriteLine("v1 is not equal to v2");

            }

            if (v1 == v3)

            {

                Console.WriteLine("v1 is equal to v3");



            }

            else

            {

                Console.WriteLine("v1 is not equal to v3");

            }

            if (v1 != v2)

            {

                Console.WriteLine("v1 is not equal to v2");



            }

            else

            {

                Console.WriteLine("v1 is  equal to v2");

            }

            Console.ReadLine();



        }

    }

}

வெளியீடு:
v1 is equal to v2

v1 is equal to v3

v1 is equal to v3

நிரல் -3 ன் விளக்கம்.
Vector என்னும் கிளாஸின் உள்ளே a,b,c என்னும் மூன்று instance வேரியபில்கள் உள்ளன.ஒரு பராமீட்டெரைஸ்டு கன்ஸ்ட்ரக்டர் உள்ளது இதுa,b,c என்னும் மூன்று வேரியபில்களின் தொடக்க மதிப்பையிருத்துகின்றது. operator ==, ,operator != என்பவை operator  overloading மெத்தட்கள் ஆகும்.Main மெத்தடில் Vector கிளாஸிற்கு மூன்று ஆப்ஜெக்ட்கள் உருவாக்கப்படுகின்றது.

v1==v2,v1==v3 என்கின்ற வரிகள் operator == என்னும் மெத்தடை invoke செய்கின்றது. v1!=v2 என்பது operator != என்னும் மெத்தடை  invoke செய்கின்றது.இந்த மெத்தட்கள் true அல்லது false என்னும் பூலீயன் மதிப்பை திருப்பி அனுப்புகின்றது. Operator != என்கின்ற மெத்தட் ஆனது அதனுள் operator == என்னும் மெத்தடை அழைக்கின்றது.
                                           
                                     -முத்து கார்த்திகேயன்,மதுரை         

No comments:

Post a Comment