piątek, marca 11, 2005

za 2 godziny...

czeka mnie cos takiego... :D

#include
#include
#include

using namespace std;

class Pojazd {
protected:
short _liczbaKol;
public:
Pojazd( short liczbaKol = 0 ) : _liczbaKol(liczbaKol) {}
Pojazd( const Pojazd & newbie ) :
_liczbaKol ( newbie._liczbaKol ) {}

virtual ~Pojazd() {}


const short liczbaKol() const { return _liczbaKol; }
short& liczbaKol() { return _liczbaKol; }


virtual void opisz() const = 0;

};


class Rower : public Pojazd {
private:
string _kolor;
public:
Rower( string kolor = "" ) : Pojazd( 2 ), _kolor( kolor ) {}
Rower( const Rower & newbie ) : Pojazd( 2 ), _kolor( newbie._kolor ) {}

const string kolor() const { return _kolor; }
string& kolor() { return _kolor; }


void opisz() const {
cout << "\nrower : " << _kolor << endl;
}

};


class Samochod : public Pojazd {
private:
double _pojemnosc;
short _rozmiar;
Rower *_tab;
public:
Samochod( double pojemnosc = 0.0 ) :
Pojazd( 4 ),
_pojemnosc( pojemnosc ),
_rozmiar( 0 ),
_tab( 0 ) {}

Samochod( short liczbaKol, double pojemnosc = 0.0 ) :
Pojazd( liczbaKol ),
_pojemnosc( pojemnosc ),
_rozmiar( 0 ),
_tab( 0 ) {}

Samochod( const Samochod & newbie ) :
Pojazd( newbie ),
_pojemnosc( newbie._pojemnosc ),
_rozmiar( newbie._rozmiar ),
_tab( new Rower [ _rozmiar ] )
{
for ( short i = 0; i < _rozmiar; ++i )
_tab[i] = newbie._tab[i];
}

~Samochod() { delete [] _tab; }


const double pojemnosc() const { return _pojemnosc; }
double& pojemnosc() { return _pojemnosc; }


void opisz() const {
cout << "Sam : " << _liczbaKol << " / " << _pojemnosc << endl;
if ( _rozmiar ){
cout << "Ilosc wiezionych rowerow: " << _rozmiar;
for ( short i = 0; i < _rozmiar; ++i )
cout << '\n' << i+1 << ". Rower kol: " << _tab[i].kolor();
}
cout << "\n\n";

}


Samochod& operator += ( const Rower & R_newbie );
Samochod& operator = ( const Samochod & S_newbie );
};


Samochod& Samochod::operator += ( const Rower & R_newbie ) {
Rower* tmp = _tab;
_rozmiar++;
_tab = new Rower [ _rozmiar ];
for ( short i = 0; i < _rozmiar - 1; ++i)
_tab[i] = tmp[i];

_tab[ _rozmiar - 1 ] = R_newbie;
delete [] tmp;
return *this;
}


Samochod& Samochod::operator = ( const Samochod& S_newbie ){
_liczbaKol = S_newbie._liczbaKol;
_pojemnosc = S_newbie._pojemnosc;
_rozmiar = S_newbie._rozmiar;

if ( _rozmiar != 0 ){
delete [] _tab;
_tab = new Rower [ _rozmiar ];
for ( short i = 0; i < _rozmiar ; ++i)
_tab[i] = S_newbie._tab[i];
}
return *this;
}


void wyswietl( const Pojazd * newbie ) {
newbie->opisz();
}

int main(){
try{
// kod testujacy mgr inz. Juliusz Mikoda

Rower r1, r2("zielony");
Rower r3(r2);
r1 = r2;
r1.kolor() = "niebieski";
r2.kolor() = "czerwony";
wyswietl(&r2);

const Rower cr(r1);
wyswietl(&cr);
cout << '\n' << cr.liczbaKol() << " " << cr.kolor() << '\n' << endl;

const Samochod taksowka(1600.0);
wyswietl(&taksowka);

Samochod star(6,3000.0);
Samochod taxi2(taksowka);
wyswietl(&taxi2);
taxi2 = star;
wyswietl(&taxi2);

star += r1;
star += r2;

wyswietl(&taxi2);
wyswietl(&star);

star += r3;
wyswietl(&star);

system("PAUSE");
}
catch (exception& e) {
cerr << e.what();
}

return 0;
}