Przeciążenie operatora minus 1 argumentowego w C#

0
class Dywizja
    {
        public int czolgi;
        public double amunicja;
        public int zolnierze;
        public double ropa;
        public int samoloty;
        public int lodzie;

        public Dywizja(int czolg, double ammo, int soldat, double paliwo, int lotnictwo, int lodzie)
        {
            czolgi = czolg;
            amunicja = ammo;
            zolnierze = soldat;
            ropa = paliwo;
            samoloty = lotnictwo;
            this.lodzie = lodzie;
        }

        public Dywizja()
        {
            czolgi = 0;
            amunicja = 0;
            zolnierze = 0;
            ropa = 0;
            samoloty = 0;
            lodzie = 0;
        }

       public static Dywizja operator -(Dywizja D1)
        {
            Dywizja wynik = new Dywizja();
            wynik.czolgi = D1.czolgi - 1;
            wynik.amunicja = D1.amunicja - 1;
            wynik.zolnierze = D1.zolnierze - 1;
            wynik.ropa = D1.ropa - 1;
            wynik.samoloty = D1.samoloty - 1;
            wynik.lodzie = D1.lodzie - 1;
            return wynik;
        }
}

    class Pokaz
    {
        public static void Main()
        {
            Dywizja DPanc_Gertruda = new Dywizja(70, 148.94, 24, 307.76, 0, 3);
            Dywizja DPiech_Sapiechy = new Dywizja(2, 70.32, 179, 15.00, 0, 1);
            Polaczona_dywizja-;
        }
    }

W linijce z kodem Polaczona_dywizja-; otrzymuję następujące błędy:

Error 1 Invalid expression term ';'
Error 2 ; expected

Dlaczego nie działa mi to przeciążenie dla 1 argumentu ? Z dwoma nie miałem problemu... złe wywołanie ?

Poprawka mała dla klasy Pokaz:

class Pokaz
    {
        public static void Main()
        {
            Dywizja DPanc_Gertruda = new Dywizja(70, 148.94, 24, 307.76, 0, 3);
            DPanc_Gertruda-;
        }
    }
0

bo -(Dywizja) przyjmuje obiekt Dywizja?

0
iooi napisał(a)

bo -(Dywizja) przyjmuje obiekt Dywizja?

czyli ma być tak:
-(DPanc_Gertruda);
?

błąd kompilatora:

Error 1 Only assignment, call, increment, decrement, and new object expressions can be used as a statement

0
  1. Takie przeciążenie operatora '-' jest bez sensu, już lepiej wyglądałaby tu dekrementacja, gdyby nie pkt. 2.
  2. Takie użycie przeciążania operatorów jest bez sensu.

Przeciążanie operatorów ma sens dla bytów, które w rzeczywistym świecie z operatorów korzystają. Umożliwi to pisanie czytelniejszego dla programisty kodu, bliższego zapisowi matematycznemu. Gdybyś zrobił sobie klasę Ułamek, albo Macierz, to przeciążanie operatorów miałoby sens. No, na upartego gdybyś miał klasę Człowiek, a potem zrobił Człowiek dziecko = mama + tata także. ;)
Natomiast dodawanie operatorów na siłę zmniejszy tylko czytelność kodu. Powinieneś napisać normalną metodę i nadać jej sensowną nazwę.

0
Azrael_Valedhel napisał(a)

Jaki sens ma -1; jako wyrażenie? Żaden. Użyj go jakoś w wyrażeniu, np x = 5 + -1

Chciałem aby to działało jako dekrementacja, nie da się ?

0

Dekrementacja to -- (dwa minusy tam są) a nie unarny - ;)

No tak, masz rację, nie sprawdziłem tego... ale żeby siebie jako tako usprawiedliwić to dodam, że to przykład z kursu języka c# i w tym kursie opisana była dekrementacja z jednym minusem jakoś próbowałem to zastosować.

Dzięki!

Żeby nie było, że kłamię to tutaj dowód. W sumie dziwne, bo wydawało mi się, że to testowałem właśnie w pętli for i mi działała taka dekrementacja, ale może to było jednak we śnie... :D dzięki jeszcze raz.

kurs c# napisał(a)

Teraz zajmiemy się pojęciem dekrementacji, jest to nic innego jak odwrotność inkrementacji, czyli zmniejszanie wartości operandu o 1. Uzyskujemy to za pomocą operatora (–). Wszystko jest tak samo jak w operatorze inkrementacji, włącznie z formą przedrostkową i przyrostkową. Działanie dekrementacji zobacz na poniższym przykładzie:
Początek kodu:

class Pokaz
{
          public static void Main()
          {
                 for (int i = 10 ; i > 0 ; i–)
                 {
                        Console.WriteLine("PĘTLA");
                 }
           }
}

Źródło: http://webcache.googleusercontent.com/search?q=cache:vb5oAZ6yxtkJ:si-szarp.pl/kurs/dekrementacja-i-continue+dekrementacja+c%23&cd=1&hl=pl&ct=clnk&gl=pl&source=www.google.pl

0

Bo uczyć to się trzeba z porządnych książek, ostatecznie porządnych kursów, a nie bazgrołów z internetu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1