Witam,
program ma za zadanie pobranie danych do obiektu a następnie zapisanie tego obiektu do tablicy obiektów vector.
Problem polega na tym, że w tablicy vector wszystkie obiekty są nadpisywane przez ostatni podany obiekt.
Przykładowo podaje atrybuty dla 15 obiektów, i wszystkie obiekty przyjmują atrybuty ostatniego obiektu.
Prosiłbym o jakiekolwiek wskazówki.
kod:
#include <iostream>
#include <vector>
using namespace std;
class Wydarzenie
{
public:
string data, opis;
Wydarzenie();
Wydarzenie(string d, string o);
Wydarzenie(const Wydarzenie &f);
~Wydarzenie(){}
void zmien_opis();
virtual void podaj() { cout <<"Data:"; getline(cin, data); cout <<"Opis:"; getline(cin, opis);}
virtual void wypisz() {cout << "Data:" <<data << ", Opis:" <<opis; }
};
//konstruktor bezparametrowy
Wydarzenie::Wydarzenie()
{
data = "01.01.1970";
opis = "brak opisu";
}
//konstruktor parametrowy
Wydarzenie::Wydarzenie(string d, string o)
{
data = d;
opis = o;
}
//konstruktor kopiujacy
Wydarzenie::Wydarzenie(const Wydarzenie &f)
{
data = f.data;
opis = f.opis;
}
void Wydarzenie::zmien_opis()
{
cout <<"Podaj opis w celu podmiany:";
getline(cin, opis);
}
//klasa pochodna 'Koncert'
class Koncert : public Wydarzenie
{
public:
string nazwaZespolu; int ile; vector <string> tab;
Koncert();
Koncert(string d, string o, string nZ, int ileCz):Wydarzenie (d, o){nazwaZespolu = nZ; ile = ileCz;}
Koncert(const Koncert &f);
~Koncert(){}
void podaj();
void wypisz();
};
//konstruktor bezparametrowy klasy pochodnej Koncert
Koncert::Koncert() {
data = "01.01.1970";
opis = "brak opisu";
nazwaZespolu = "brakNazwyZespolu";
}
//konstruktor kopiujacy
Koncert::Koncert(const Koncert &f)
{
data = f.data;
opis = f.opis;
nazwaZespolu = f.nazwaZespolu;
}
// metoda klasy pochodnej 'Koncert' podajCzlonkow
void Koncert::podaj()
{
Wydarzenie::podaj();
string pom;
cout <<"Prosze podac czlonkow zespolu: ";
for (int i=0; i<ile; i++)
{
cout <<endl<<"czlonek zespolu nr"<<i+1;
getline(cin, pom);
tab.insert(tab.begin()+i, pom);
}
}
void Koncert::wypisz()
{
Wydarzenie::wypisz();
cout <<"nazwa zespolu:"<<nazwaZespolu<<", ";
cout <<"czlonkowie zespolu:";
for (int i=0; i<tab.size(); i++)
{
cout <<tab[i] <<", ";
}
}
//klasa pochodna WystawaMalarstwa
class WystawaMalarstwa : public Wydarzenie
{
public:
string pole; int ile; vector <string> tab;
WystawaMalarstwa(string d, string o, string p, int ileO):Wydarzenie(d, o) {pole = p; ile = ileO;}
WystawaMalarstwa();
WystawaMalarstwa(const WystawaMalarstwa &f);
~WystawaMalarstwa(){}
void podaj();
void wypisz();
};
// konstruktor bezparametrowy klasy pochodnej 'WystawaMalarstwa'
WystawaMalarstwa::WystawaMalarstwa()
{
data = "01.01.1970";
opis = "brak opisu";
pole = "brakNazwiskaKuratoraWystawy";
}
//konstruktor kopiujacy
WystawaMalarstwa::WystawaMalarstwa(const WystawaMalarstwa &f)
{
data = f.data;
opis = f.opis;
pole = f.pole;
}
//metoda klasy pochodnej 'WystawaMalarstwa' podaj()
void WystawaMalarstwa::podaj()
{
Wydarzenie::podaj();
string pom;
cout <<"prosze podac kuratora wystawy:";
getline(cin, pole);
cout <<"Prosze podac ilosc obrazow: ";
cin>>ile;
cout <<"Prosze podac nazwy obrazow: ";
for (int i=0; i<ile; i++)
{
cout <<"obraz nr "<<i<<", ";
getline(cin, pom);
tab.insert(tab.begin()+i, pom);
}
}
void WystawaMalarstwa::wypisz()
{
Wydarzenie::wypisz();
cout <<", kurator wystawy:"<<pole<<", ";
cout <<"obrazy:";
for (int i=0; i<tab.size(); i++)
{
if (tab.size()>i+1)
cout <<tab[i] <<", ";
else
cout<<tab[i];
}
}
int main()
{
vector <Wydarzenie*> myClass;
Wydarzenie* p = NULL;
WystawaMalarstwa w;
for (int i=0; i< 3; i++)
{
p = new Wydarzenie();
p = &w;
p->podaj();
myClass.push_back(p);
}
for (int i=0; i<4; i++)
{
myClass[i]->wypisz();
cout <<endl;
}
return 0;
}