Mam do napisania projekt, który będzie imitował pojemnik na śmieci. Generalnie dwie klasy - odpad i pojemnik i parę przeciążonych operatorów. Napisałem to ale nie wiem dlaczego nie działają najprostsze funkcje. Wygląda na to, że po wyjściu z ciała jakiejś funkcji zniszczeniu ulegają wszystkie obiekty. Może ktoś będzie potrafił rozwiązać ten problem.
Oto kod:
#include <iostream>
#include <vector>
using namespace std;
enum rodzaj_odpadu {szklo, papier, plastik};
class odpad
{
public:
int wartosc;
int waga;
enum rodzaj_odpadu rodzaj;
odpad(int wart, int wag, rodzaj_odpadu r_o)
{
cout<<"odpad zostal stworzony konstruktor z wartosciami"<<endl;
wartosc=wart;
waga=wag;
rodzaj=r_o;
};
odpad(void) {cout<<"odpad zostal stworzony konstruktor domyslny"<<endl;};
~odpad(void){cout<<"odpad zostal zniszczony, dziala destruktor:"<<waga<<endl;}; //destruktor
};
class pojemnik : public odpad
{
public:
vector<odpad> kontener;
vector<odpad>::iterator it_1;
pojemnik(void){cout<<"pojemnik zostal stworzony"<<endl;};
~pojemnik(void){cout<<"pojemnik zostal zniszczony"<<endl;};
pojemnik operator + (odpad);
pojemnik operator - (odpad);
pojemnik operator + (pojemnik);
pojemnik operator == (pojemnik);
pojemnik & operator = (pojemnik & wzor);
pojemnik operator < (pojemnik);
void czy_pusty();
void wypisz();
void wprowadz_odpad();
void czy_odpad(rodzaj_odpadu r_o);
void ile_odpadow(rodzaj_odpadu r_o);
friend istream & operator >> (istream & klawiatura, pojemnik & poj);
friend ostream & operator << (ostream & ekran, pojemnik & poj);
};
pojemnik pojemnik::operator + (odpad odp) //definicja operatora +
{
pojemnik wynik;
for(it_1=kontener.begin(); it_1!=kontener.end();it_1++)
wynik.kontener.push_back(*it_1);
wynik.kontener.push_back(odp);
cout<<"odpad dodany do pojemnika"<<endl;
return wynik;
//kontener.push_back(odp);
//cout<<"odpad dodany do pojemnika"<<endl;
//return *this;
}
pojemnik pojemnik::operator - (odpad odp) //definicja operatora +
{
kontener.pop_back(); //dodanie odpadu do pojemnika
cout<<"odpad usuniety z pojemnika"<<endl;
return *this;
}
pojemnik pojemnik::operator + (pojemnik poj) //definicja operatora dodawania pojemnikw
{
pojemnik wynik;
for(poj.it_1=poj.kontener.begin();poj.it_1!=poj.kontener.end();poj.it_1++)
kontener.push_back(*poj.it_1);
cout<<"pojemniki zostaly polaczone"<<endl;
}
pojemnik pojemnik::operator == (pojemnik poj)
{
poj.it_1=poj.kontener.begin();
if (kontener.size()!=poj.kontener.size())
cout<<"pojemniki sa roznych rozmiarow"<<endl;
else
{
for (it_1=kontener.begin(); it_1!=kontener.end();it_1++)
{
if(it_1!=poj.it_1)
cout<<"pojemniki nie sa takie same"<<endl;
break;
poj.it_1++;
}
cout<<"pojemniki sa identyczne";
}
}
pojemnik pojemnik::operator < (pojemnik poj)
{
if(kontener.size()<poj.kontener.size())
cout<<"pojemnik 2 jest ciezszy od pojemnika 1"<<endl;
else if(kontener.size()>poj.kontener.size())
cout<<"pojemnik 1 jest ciezszy od pojemnika 2"<<endl;
else
cout<<"pojemniki sa tak samo ciezkie"<<endl;
}
pojemnik & pojemnik::operator = (pojemnik & wzor)
{
kontener.clear();
for(wzor.it_1=wzor.kontener.begin(); wzor.it_1!=wzor.kontener.end();wzor.it_1++)
kontener.push_back(*wzor.it_1);
return *this;
}
void pojemnik::czy_pusty()
{
if (kontener.size()!=0)
cout<<"pojemnik nie jest pusty"<<endl;
else
cout<<"pojemnik jest pusty"<<endl;
}
void pojemnik::czy_odpad(rodzaj_odpadu r_o)
{
for(it_1=kontener.begin(); it_1!=kontener.end();it_1++)
{
if(rodzaj==r_o)
cout<<"pojemnik posiada odpady typu "<<r_o<<endl;
}
}
void pojemnik::ile_odpadow(rodzaj_odpadu r_o)
{
int licz=0;
for(it_1=kontener.begin(); it_1!=kontener.end();it_1++)
{
if(rodzaj==r_o)
{
licz++;
cout<<"odpad typu "<<rodzaj_odpadu(r_o)<<"nr "<<licz<<endl;
cout<<"waga "<<waga<<" wartosc "<<wartosc;
}
}
}
istream& operator >> (istream& klawiatura, pojemnik& poj)
{
odpad odp;
cout<<"podaj wartosc"<<endl;
klawiatura>>odp.wartosc;
cout<<"podaj wage"<<endl;
klawiatura>>odp.waga;
poj.kontener.push_back(odp);
cout<<"odpad dodany";
return klawiatura;
}
ostream& operator << (ostream& ekran, pojemnik& poj)
{
ekran<<"zawartosc pojemnika"<<endl;
for(poj.it_1=poj.kontener.begin(); poj.it_1!=poj.kontener.end();poj.it_1++)
ekran<<"waga "<<poj.waga<<" wartosc "<<poj.wartosc<<endl;
return ekran;
}
int main()
{
pojemnik poj_1;
pojemnik poj_2;
odpad butelka(3,1,plastik);
odpad sloik(4,2,szklo);
odpad gazeta(10,4,papier);
cin>>poj_1;
cout<<poj_1;
//test_dodawania
//poj_1+butelka;
//cout<<poj_1;
//poj_1+sloik;
//cout<<poj_1;
//poj_1+gazeta;
//cout<<poj_1;
// test_odejmowania()
/*
poj_1+butelka+sloik+gazeta+gazeta;
poj_1-butelka;
cout<<poj_1;
poj_1-sloik;
cout<<poj_1;
poj_1-gazeta;
cout<<poj_1;
*/
//test_dodawania_pojemikow()
// test_porownania()
// test_ciezkosci()
// test_przypisania()
// test_czy_pusty()
// test_czy_odpad()
// test_ile_odpadow()
// test_wypisz()
// test_wprowadz_odpad()
system("pause");
return 0;
}
Z góry dzięki