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 |