'연산자 오버로딩'에 해당되는 글 1건

  1. 2018.05.08 C#/.NET 연산자 오버로딩(operator)


C++과 마찬가지로 C#/.NET에도 연산자 오버로딩을 지원한다.


연산자 오버로딩은 해당 언어 자체에서 제공하고 있는 연산자에 대하여 그 의미를 다시 부여하는 것을 말한다.


즉 +나 -, * 등과 같은 연산자는 원래의 의미인 4칙연산이 있지만 이것을 재정의하여 사용하게 해주는 것이다.


연산자 오버로딩은 자주 사용하는 문법은 아니지만 잘만 사용하면 문법자체가 간결해질 수 있다.


아래 코드를 보면 +와 - 연산자에 대해서 오버로딩 함수를 정의한 것을 볼 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Point
{
    public int X { get; set; }
    public int Y { get; set; }
    public int Z { get; set; }
    public Point(int x,int y,int z)
    {
        this.X = x;
        this.Y = y;
        this.Z = z;
    }
    public static Point operator +(Point p1, Point p2)
    {
        return new Point(p1.X + p2.X, p1.Y + p2.Y, p1.Z + p2.Z);            
    }
    public static Point operator -(Point p1, Point p2)
    {
        return new Point(p1.X - p2.X, p1.Y - p2.Y, p1.Z - p2.Z);
    }
    public String toString()
    {
        return "x: " + X + ", y: " + Y + ", z: " + Z;
    }
}
 
class Program
{
    static void Main(string[] args)
    {
        Point p1 = new Point(5,4,11);
        Point p2 = new Point(1,3,3);
        Point addPoint = p1 + p2;
        Point subPoint = p1 - p2;
 
        Console.WriteLine(addPoint.toString());
        Console.WriteLine(subPoint.toString());
    }
}
cs





아래는 MSDN에 나와있는 연산자 오버로딩이 가능한 연산자이다. 

연산자

오버로드 가능성

+, -, !, ~, ++, --, true, false

이 단항 연산자는 오버로드할 수 있습니다.

+, -, *, /, %, &, | , ^, <<, >>

이 이항 연산자는 오버로드할 수 있습니다.

==, !=, <, >, <=, >=

비교 연산자는 오버로드할 수 있습니다. 단, 이 표의 아래에 있는 참고 사항을 참조하십시오.

&&, ||

조건 논리 연산자는 오버로드할 수 없지만, 오버로드 가능한 & | 를 사용하여 계산할 수 있습니다.

[]

배열 인덱싱 연산자는 오버로드할 수 없지만 인덱서를 정의할 수 있습니다.

(T)x

캐스트 연산자는 오버로드할 수 없지만 새로운 변환 연산자를 정의할 수 있습니다(explicit  implicit 참조).

+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

할당 연산자는 오버로드할 수 없지만 다른 방법으로 계산할 수 있습니다. 예를 들어, += 연산자는 오버로드할 수 있는 + 연산자를 사용하여 계산할 수 있습니다.

=, ., ?:, ??, ->, =>, f(x), as,checked, unchecked, default,delegate, is, new, sizeof, typeof

이 연산자는 오버로드할 수 없습니다.

자료출처 : https://msdn.microsoft.com/ko-kr/library/8edha89s(v=vs.120).aspx

Posted by 꿈만은공돌
,