#include <iostream>
using namespace std;
enum kolor {czarny,czerwony,niebieski,bialy};
class pojazd
{
protected:
int ilosc_kol;
public:
pojazd(int ile) : ilosc_kol(ile) {}
pojazd(const pojazd &);
pojazd & operator=(const pojazd & wz);
};
class automobil : public pojazd
{
int stan_licznika;
kolor kolor_karoserii;
public:
automobil(int kola, kolor k, int licznik) : pojazd(kola)
{
stan_licznika = licznik;
kolor_karoserii = k;
}
automobil(const automobil &);
automobil & operator=(const automobil &ww);
friend ostream & operator <<(ostream & ekran, const automobil & obj);
};
pojazd::pojazd(const pojazd & wzor)
{
ilosc_kol = wzor.ilosc_kol;
}
automobil::automobil(const automobil & wzorzec) : pojazd(wzorzec)
{
stan_licznika = 0;
kolor_karoserii = wzorzec.kolor_karoserii;
}
pojazd & pojazd::operator=(const pojazd & wz)
{
ilosc_kol = wz.ilosc_kol;
return *this;
}
automobil & automobil::operator=(const automobil & wzor)
{
// 1 sposob:
(*this).pojazd::operator=(wzor);
// 2 sposob:
pojazd *wskpojazd = this;
(*wskpojazd) = wzor;
// 3 sposob:
pojazd & refpojazd = *this;
refpojazd = wzor;
// dalsza czesc operatora przypisania
kolor_karoserii = wzor.kolor_karoserii;
stan_licznika = wzor.stan_licznika + 2;
return *this;
}
ostream & operator<<(ostream & ekran, const automobil & obj)
{
ekran << " Liczba kol " << obj.ilosc_kol
<< ", Licznika " << obj.stan_licznika
<< ", kolor nr" << obj.kolor_karoserii << endl;
return ekran;
}
Pomijam przerabianie reszty programu na c#.
Ten fragment w c++:
automobil & automobil::operator=(const automobil & wzor)
{
// 1 sposob:
(*this).pojazd::operator=(wzor);
// 2 sposob:
pojazd *wskpojazd = this;
(*wskpojazd) = wzor;
// 3 sposob:
pojazd & refpojazd = *this;
refpojazd = wzor;
// dalsza czesc operatora przypisania
kolor_karoserii = wzor.kolor_karoserii;
stan_licznika = wzor.stan_licznika + 2;
return *this;
}
w c# by wyglądał tak ?:
automobil & automobil::operator=(const automobil & wzor)
{
// 1 sposob:
this.pojazd::operator=(wzor);
// 2 sposob:
pojazd wskpojazd = this;
wskpojazd = wzor;
// dalsza czesc operatora przypisania
kolor_karoserii = wzor.kolor_karoserii;
stan_licznika = wzor.stan_licznika + 2;
return *this;
}
i tylko 2 sposoby zapisu, ponieważ w c# nie ma wskaźników.
I jeszcze takie pytanie, mam przeciążony operator <<, którego funkcja jest zaprzyjaźniona z klasą automobil. Jak ten operator przeładować w c#, jeśli składniki klasy automobil byłyby prywatne ?