728x90
class OperatorOverload
    {
        public readonly struct Fraction
        {
            private readonly int num;
            private readonly int den;

            public Fraction(int numerator, int denominator)
            {
                if (denominator == 0)
                {
                    throw new ArgumentException("Denominator cannot be zero.", nameof(denominator));
                }
                num = numerator;
                den = denominator;
            }

            public static Fraction operator +(Fraction a) => a;
            public static Fraction operator -(Fraction a) => new Fraction(-a.num, a.den);

            public static Fraction operator +(Fraction a, Fraction b)
                => new Fraction(a.num * b.den + b.num * a.den, a.den * b.den);

            public static Fraction operator -(Fraction a, Fraction b)
                => a + (-b);

            public static Fraction operator *(Fraction a, Fraction b)
                => new Fraction(a.num * b.num, a.den * b.den);

            public static Fraction operator /(Fraction a, Fraction b)
            {
                if (b.num == 0)
                {
                    throw new DivideByZeroException();
                }
                return new Fraction(a.num * b.den, a.den * b.num);
            }

            public override string ToString() => $"{num} / {den}";

        }

        public static void Answer()
        {
            var a = new Fraction(5, 4);
            var b = new Fraction(1, 2);
            Console.WriteLine(-a);
            Console.WriteLine(a + b);
            Console.WriteLine(a - b);
            Console.WriteLine(a * b);
            Console.WriteLine(a / b);
        }
    }

 

class Program
{
	static void Main(string[] args)
    {
    	Console.WriteLine("--------------OperatorOverload--------------");
        OperatorOverload.Answer();
    }
}

 

위에 Answer() 문을 Main으로 바로 작성해주어도 호출 값은 동일

class Program
{
	static void Main(string[] args)
    {
    	Console.WriteLine("--------------OperatorOverload--------------");
        //OperatorOverload.Answer();

        var a = new OperatorOverload.Fraction(5, 4);
        var b = new OperatorOverload.Fraction(1, 2);
        Console.WriteLine(-a);
        Console.WriteLine(a + b);
        Console.WriteLine(a - b);
        Console.WriteLine(a * b);
        Console.WriteLine(a / b);
    }
}

 

오버로드 가능 연산자

+x, -x, !x, ~x, ++, --, true, false true 및 false 연산자는 함께 오버로드 되어야 함
x+y, x-y, x * y, x/y, x%y, x&y, x|y, x^y, x<<y, x>>y, x>>>y  
x==y, x!=y, x<y, x>y, x<=y, x>=y >및 < 및 <=,>=와 !=같이 쌍으로 오버로드되어야 함

 

 

 

728x90

'c#' 카테고리의 다른 글

[C#] Interface  (0) 2023.01.05
[C#] 순수 함수  (0) 2023.01.04
[C#] 함수형 프로그래밍  (0) 2023.01.04
[C#] await 연산자  (0) 2023.01.04
[Console]Keypress  (0) 2022.11.09
Posted by 바르마스
,