Советы, трюки и секреты для Blogger.com блоггеров. Все для Blogspot. Советы, трюки и секреты для Blogger.com блоггеров. Все для Blogspot.

Перегрузка операций в классе (C#)

30 декабря 2009, 04:01

В классе для работы с комплексными числами перегрузить операции:
  • “ ++”: увеличение действительной и мнимой части на единицу;
  • “-  “ (унарный):  построение комплексно-сопряженного числа; 
  • “*” : результатом является произведение двух комплексных чисел.
Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace lab1
{
    class Komp
    {
        public double a;
        public double b;
        public Komp(double x, double p)//конструктор
        {
            a = x;
            b = p;
        }
        public void print() //метод вывода
        {
            string s = "";
            if (b > 0) s = "+";
            Console.WriteLine("Число = {0}{1}{2}i", a, s, b);
        }
        public double mod() //м модуль
        {

            return Math.Sqrt(a * a + b * b);
        }
        public void sop() //м сопреженное
        {
            a = a * (-1);
            b = b * (-1);

        }

 
 
        /////////////////////////   ++ ////////////////////////////
        public static Komp operator ++(Komp c) 
        {
           
           Komp cnew = new Komp(c.a + 1, c.b + 1); // Перехватов Д. 09мос(у)
           return cnew;
        }
        /////////////////////////   -  ////////////////////////////
        public static Komp operator - (Komp c)
        {

            Komp cnew = new Komp(c.a * (-1), c.b * (-1));
            return cnew;
        }

        /////////////////////////   *  ////////////////////////////
        public static Komp operator *(Komp c1,Komp c2)
        {

            Komp cnew = new Komp(((c1.a*c2.a)+(c1.b*c2.b*(-1))) ,((c1.a*c2.b)+(c1.b*c2.a)));
            return cnew;
        }

        public double X //свойство для обращения к полю x
        {
            get
            {
                return a;
            }
            set
            {
                a = value;
            }
        }
        public double Y //свойство для обращения к полю y
        {
            get
            {
                return b;
            }
            set
            {
                b = value;
            }
        }
        public double g//свойство только для чтения
        {
            get
            {
                if (a > 0 && b > 0) return 1;
                if (a > 0 && b < 0) return 2;
                if (a < 0 && b < 0) return 3;
                if (a < 0 && b > 0) return 4;
                return 0;
            }

        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            Komp k = new Komp(2, 2);   //вызов конструктора 
            Komp k1 = new Komp(2, 2);
            k.print();
            Console.WriteLine("Модуль = {0}", k.mod());
            Console.WriteLine(" сопреженное ");
            Komp b = -k;
            b.print();
            Console.WriteLine(" +1 ");
            Komp c = k++;
            //k.sop();
            k.print();
            Console.WriteLine(" * ");
            Komp d = k * k1;
            d.print();

            k.X = 5;
            k.Y = 5;

            Console.WriteLine("Четверть = {0}", k.g);
        }
    }
}

Перегрузка операций в классе (C#)