pzreciążenie operatora [vs2010]

2

mam taką klasę i w niej przeciążenie operatora +, jak mam to wykorzystać w formatce np aby w messageboxie wyświetlał wynik tej funkcji?? proszę o pomoc

 
class Rosliny
    {
       public static int asd;
       public int woda;
       public int mrozo_odpornosc;
       public int nawoz;
       public int swiatlo;
       public double koszt;
       public virtual double koszt_dzienny()
       {
           koszt = (woda * 0.21) + (nawoz * 0.75);
           return koszt;
       }       
        
        public Rosliny()
        {
            this.woda = 0;
            this.mrozo_odpornosc = 0;
            this.nawoz = 0;
            this.swiatlo = 0;
        }

        public Rosliny(int woda1, int mrozo_odpornosc1, int nawoz1, int swiatlo1)
        {
            woda = woda1;
            mrozo_odpornosc = mrozo_odpornosc1;
            nawoz = nawoz1;
            swiatlo = swiatlo1;
        }
        public static Rosliny operator +(Rosliny a, Rosliny b)
        {
            Rosliny wynik = new Rosliny();
            wynik.mrozo_odpornosc = a.mrozo_odpornosc + b.mrozo_odpornosc;
            wynik.nawoz = a.nawoz + b.nawoz;
            wynik.swiatlo = a.swiatlo + b.swiatlo;
            wynik.woda = a.woda + b.woda;
            return wynik;            
        }        
    }
}

1

W MessageBox można wyświetlać tekst, a nie wynik funkcji.

Zgaduję, że chciałbyś po użyciu swojego sprytnego operatora dodawania roślin, wyświetlić informacje o właściwościach tego obiektu, czyli wodzie, świetle, mrozoodporności (tak, to jest jedno słowo!), itd. W tym celu powinieneś przeciążyć w klasie Rosliny metodę ToString(), aby zwracała odpowiednio sformatowany tekst.

0

może trochę się źle wyraziłem, chodzi mi o jakiekolwiek wykorzystanie przeciążenia operatora w winforms, niekoniecznie aby wyświetlał wszystkie cechy, zmieniłem na coś takiego teraz inna klasę

class Lesne : Rosliny
    {
        public static int wzrost = 64;

       
        public Lesne()
        {
            this.woda = 34;
            this.mrozo_odpornosc = 21;
            this.swiatlo = 56;
            this.nawoz = 13;
        }

        public Lesne(int _wiek, int _dlugie)
        {
            this.wiek = _wiek;
            this.dlugie = _dlugie;
        }
        
        public int wiek = 12;
        public int dlugie = 43;

       public static int operator -(Lesne lesne)
        {
            return (lesne.swiatlo - lesne.nawoz);
        }
 

a w kodzie foramtki np cos takiego

 private void button5_Click(object sender, EventArgs e)
        {
               MessageBox.Show(Lesne - Lesne.wzrost);
        }
 

i tutaj jest problem bo wyświetla błąd Error 1 'WindowsFormsApplication1.Lesne' is a 'type' but is used like a 'variable' i nie wiem jak to rozwiązać, proszę o pomoc

0

Bo Lesne to jest typ, a Ty potrzebujesz obiektu - podobnie jak to zrobiłeś w operatorze dodawania :) Coś w ten deseń:

Lesne a, b; 
MessageBox.show((a - b).wzrost);
0

Żeby rozwiązać ten "problem" trzeba poznać różnice między klasą, a obiektem, czyli przysiąść do książek.

0

mam dwa obiekty, ale coś dalej nie gra

 
private void button5_Click(object sender, EventArgs e)
        {
            Lesne les = new Lesne();
            Lesne les1 = new Lesne();

            MessageBox.Show((les - les1).wzrost);
        }

błąd brzmi : Error 1 Operator '-' cannot be applied to operands of type 'WindowsFormsApplication1.Lesne' and 'WindowsFormsApplication1.Lesne'

0

zastanów się, co ma zwracać operator. takie coś:

MessageBox.Show((les - les1).wzrost);

oznacza "odejmij "Lesne – Lesne" i zwróć coś co ma pole lub właściwość .wzrost. Ale twój operator zwraca inta.

0

mam wynik zwracający przekonwertowac na stringa?

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