2018年1月2日火曜日

開発環境

初めてのC# 第2版 (Jesse Liberty (著)、Brian MacDonald (著)日向 俊二 (翻訳)、オライリージャパン)の12章(演算子のオーバーロード)、12.3(Equals 演算子)、補足情報(読者の練習問題).を取り組んでみる。

コード

using System;

namespace Sample9
{
    class Fraction
    {
        private int numerator;
        private int denominator;

        private static int gcd(int a, int b)
        {
            int x = a < 0 ? -a : a;
            int y = b < 0 ? -b : b;
            int n = x < y ? x : y;
            for (int i = n; i > 0 ; i--)
            {
                if (x % i == 0 && y % i == 0)
                {
                    return i;
                }
            }
            return 1;
        }
        public Fraction(int numerator, int denominator)
        {
            int d = gcd(numerator, denominator);
            this.numerator = numerator / d;
            this.denominator = denominator / d;
        }
        public static bool operator ==(Fraction lhs, Fraction rhs)
        {
            if (lhs.denominator == rhs.denominator && lhs.numerator == rhs.numerator)
            {
                return true;
            }
            return false;
        }
        public static bool operator !=(Fraction lhs, Fraction rhs)
        {
            return !(lhs == rhs);
        }
        public override bool Equals(Object o)
        {
            if (! (o is Fraction))
            {
                return false;
            }
            return this == (Fraction)o;
        }
        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
        public override string ToString()
        {
            return string.Format("{0}/{1}", numerator, denominator);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Fraction a = new Fraction(3, 4);
            Fraction b = new Fraction(6, 8);
            Fraction c = new Fraction(-9, 12);
            Fraction[] nums = { a, b, c };

            foreach (var x in nums)
            {
                Console.WriteLine(x);
                foreach (var y in nums)
                {
                    Console.WriteLine("\t{0}: {1}", y, x == y);
                }
            }
        }
    }
}

入出力結果(Terminal)

3/4
 3/4: True
 3/4: True
 -3/4: False
3/4
 3/4: True
 3/4: True
 -3/4: False
-3/4
 3/4: False
 3/4: False
 -3/4: True

Press any key to continue...

0 コメント:

コメントを投稿