2014년 10월 22일 수요일

23. [C#,닷넷교육]연산자 오버로딩, Operator Overloading[닷넷C#교육/ADO.NET강좌/ASP.NET교육잘하는곳/C#,ASP.NET교육추천/닷넷실무교육/.NET,C#/ADO.NET교육/닷넷학원/ASP.NET실무교육]

23. [C#,닷넷교육]연산자 오버로딩, Operator Overloading

 

연산자 오버로딩이란 +, >와 같은 표준 연산자들을 클래스의 용도에 맞게 작동토록 한 것이다. 연산자를 오버로딩 한다는 것은 이름은 같지만 받아 들이는 피연산자의 형식이 다른 연산자를 여러 개 정의 한다는 뜻이다. 연산자 오버로딩은 표준 연산자들이 가지는 단순 형식들에 대해 가지는 의미를 좀더 복잡한 형식에도 그데로 적용하고자 할 때 유용하게 쓰인다.

 

다음과 같은 AddClass1 이 있다고 하자.

 

public class AddClass1 {

         public int val;

}

 

아래의 코드는 될 것 같지만 컴파일 되지 않는다.

 

AddClass1 op1 = new AddClass();

op1.val=1

AddClass1 op2 = new AddClass();

op2.val=2

AddClass1 op3 = op1 + op2;  //오류 +연산자가 AddClass1 형식의 피연산자에는 적용되지 않는 다는 점이다.

 

위의 예제를 다음과 같이 고쳐 보자.

using System;

 

namespace OperatorOverload1

{

      public class AddClass1

      {

            public int val;

            public static AddClass1 operator + (AddClass1 op1, AddClass1 op2)

            {

                  AddClass1 obj = new AddClass1();

                  obj.val = op1.val + op2.val;

                  return obj;

            }

      }

 

 

      class Test

      {

            static void Main()

            {

                  AddClass1 op1 = new AddClass1();

                  op1.val=1;

                  AddClass1 op2 = new AddClass1();

                  op2.val=2;

                  AddClass1 op3 = op1 + op2;

                  Console.WriteLine("op1 + op2 = {0}", op3.val);

            }    

      }

 

}

 

 

 

[조금 변형한 아래의 예제를 보자]

 


using System;

 

namespace OperatorOverload1

{

      public class AddClass2

      {

            public int val;

 

            //아래의 함수는 AddClass1, AddClass2에서는 정의가 가능하며 AddClass3에서는 불가

            public static AddClass3 operator + (AddClass1 op1, AddClass2 op2)

            {

                  AddClass3 obj = new AddClass3();

                  obj.val = op1.val + op2.val;

                  return obj;

            }

           

      }

 

      public class AddClass1

      {

            public int val;

      }

 

      public class AddClass3

      {

            public int val;

           

      }

 

      class Test

      {

            static void Main()

            {

                  AddClass1 op1 = new AddClass1();

                  op1.val=1;

                  AddClass2 op2 = new AddClass2();

                  op2.val=2;

                  AddClass3 op3 = op1 + op2;

                  Console.WriteLine("op1 + op2 = {0}", op3.val);

            }    

      }

 

}


 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272244
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111614
53 [평일주간100%환급]Spring,JAVA,JSP,안드로이드,C#닷넷,SQL,튜닝… 오라클자바…03-151406
52 [주말]C#,ASP.NET마스터 오라클자바…01-311520
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-311754
50 [기업100%환급]개발자를위한스프링,마이바티스,하이버네이트(스… 오라클자바…01-311216
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191508
48 [평일주간,평일야간,주말]안드로이드개발자과정 오라클자바…01-111341
47 [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… 오라클자바…01-031872
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272244
45 [기업100%환급]자바웹개발기초과정(JAVA,JDBC,JSP,Servlet,Aajx,… 오라클자바…12-191615
44 [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… 오라클자바…12-141586
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111614
42 [주말주간]자바&웹,jQUERY,스프링프레임워크 오라클자바…12-091287
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011509
40 [기업100%환급]자바기초&안드로이드개발자과정(Android전액환급… 오라클자바…12-011683
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011158

댓글 없음:

댓글 쓰기