Jestem w trakcie pisania projektu na progr obiektowe. Zatrzymałem się w pewnym punkcie mianowicie. Mam 2 funkcje, jedna tworzy obiekt danej klasy dynamicznie i wrzuca go do listy obiektów. Druga funkcja ma po kolei wyświetlać dodane uprzednio obiekty, sęk w tym że jak wyjdę z while wszystkie dane przepadają. Wrzucam mój kod, po kompilacji zrozumiecie o co mi chodzi. Co zrobić aby obiekty zamieszczone raz w liście były widoczne zawsze i wszędzie aż do zakończenia pracy programu lub wywołania funkcji list.clear().
#include <iostream>
#include <string>
#include <list>
#include <fstream>
#include <cstddef>
using namespace std;
//CLASSES
class A
{
public:
string drugi, name;
A(string nazwa, string nazwisko): drugi(nazwisko), name(nazwa){}
protected:
private:
};
class B : public A
{
public:
B(string drugi, string name, string imie): A(drugi,name), pierwszy(imie){}
protected:
string pierwszy;
private:
};
class C : public A
{
public:
protected:
private:
};
class D : public B // LIŚĆ
{
public:
D(string pierwszy, string drugi, string name, int wiek): B(pierwszy, drugi, name), trzeci(wiek){}
friend void showobjD(list<D> listD, string &a, string &b, string &c, int &d);
friend void makeobjD(list<D> listD, string &a, string &b, string &c, int &d);
protected:
private:
int trzeci;
};
class E : public B
{
public:
protected:
private:
};
class F : public C
{
public:
protected:
private:
};
class G : public C
{
public:
protected:
private:
};
class H: public E, public F //LIŚĆ
{
public:
protected:
private:
};
class I : public F
{
public:
protected:
private:
};
class J : public G
{
public:
protected:
private:
};
class K : public G // LIŚĆ
{
public:
protected:
private:
};
class L : public I // LIŚĆ
{
public:
protected:
private:
};
class M : public I // LIŚĆ
{
public:
protected:
private:
};
class N : public J // LIŚĆ
{
public:
protected:
private:
};
void makeobjD(list<D> listD, string &a, string &b, string &c, int &d)
{
//list<D> listD;
//string a,b,c;
//int d;
bool next=true;
char p;
cout << "A - Dodaj obiekt: " << endl << " Q - Wyjdz. " << endl << " B - Wyswietl. " << " C - wyczysc. " << endl;
while(next)
{
cin >> p;
switch(p &0x5F)
{
case 'A':
{
cout << " Nazwa obiektu: (string)" << endl;
cin >> a;
cout << " Pierwsze pole: (string)" << endl;
cin >> b;
cout << " Drugie pole: (string)" << endl;
cin >> c;
cout << " Trzecie pole: (int)" << endl;
cin >> d;
D* obiekt = new D(a, b, c, d);
listD.push_back(*obiekt);
cout << "A - Dodaj kolejny: " << endl;
}
break;
case 'B':
{
cout << " dzialam " << endl;
for(list<D>::iterator iter=listD.begin(); iter != listD.end(); ++iter)
{
cout << iter->pierwszy << " " << iter->drugi << " " << iter->name << " " << iter->trzeci << endl;
}
}
case 'C':
{
listD.clear();
}
break;
case 'Q': next=false;
break;
}
}
}
void showobjD(list<D> listD, string &a, string &b, string &c, int &d)
{
cout << " dzialam " << endl;
for(list<D>::iterator iter=listD.begin(); iter != listD.end(); ++iter)
{
cout << iter->pierwszy << " " << iter->drugi << " " << iter->name << " " << iter->trzeci << endl;
}
cout << " tak " << endl;
}
//FUNKCJE
void draw_hierarhy(){
cout<<" A"<<endl;
cout<<" "<<(char)218<<(char)196<<(char)196<<(char)196<<(char)193<<(char)196<<(char)196<<(char)196<<(char)191<<endl;
cout<<" B C"<<endl;
cout<<" "<<(char)218<<(char)196<<(char)193<<(char)196<<(char)191<<" "<<(char)218<<(char)196<<(char)193<<(char)196<<(char)196<<(char)196<<(char)191<<endl;
cout<<" D E F G"<<endl;
cout<<" "<<(char)192<<(char)196<<(char)191<<" "<<(char)179<<" "<<(char)218<<(char)196<<(char)193<<(char)196<<(char)191<<endl;
cout<<" H"<<(char)196<<(char)180<<" "<<(char)179<<" "<<(char)179<<endl;
cout<<" I J K"<<endl;
cout<<" "<<(char)218<<(char)196<<(char)193<<(char)196<<(char)191<<" "<<(char)179<<endl;
cout<<" L M N"<<endl;
}
//MAIN
int main()
{
string a,b,c;
int d;
list<D> listD;
char w, m;
bool next=true, ext=true;
while(next)
{
cout << "C - Zmiana wezla w strukturze. " << endl; //CD
cout << "M - Stworz obiekt. " << endl; //MO
cout << "D - Usun obiekt. " << endl; //DO
cout << "O - Zmodyfikuj obiekt. " << endl; //MDO
cout << "I - Wyswietl informacje(nazwy) obiektow z danego poziomu. " << endl; //DIR
cout << "S - Szczegolowe informacje o obiekcie. " << endl; //SHOW
cout << "E - Zapisz zbior do pliku. " << endl; //SAVE
cout << "A - Odczyt zbioru z pliku. " << endl; //READ
cout << "T - Wyswietl hierarchie. " << endl; //TREE
cout << "Q - Zamknij program. " << endl; //QUIT
cin>>w;
switch(w &0x5F)
{
case 'C': //cd
break;
case 'M':
{
while(ext)
{
cout << " Do ktorej klasy dodac obiekt? " << endl << " D || H || L || M || N || K " << endl;
cout << " Q - Wyjdz z tej opcji. " << endl;
cin >> m;
switch(m &0x5F)
{
case 'D':
{
makeobjD(listD, a, b, c, d);
}
break;
case 'Q':
ext = false;
break;
}
}
}
break;
case 'D': //do
break;
case 'O': //mdo
break;
case 'I':
showobjD(listD, a, b, c, d);
break;
case 'S': //show
break;
case 'E': //save
break;
case 'A': //read
break;
case 'T': //tree
draw_hierarhy();
break;
case 'Q': //quit
next=false;
break;
}
}
return 0;
}