Nie jestem pewny co do tego, że to najlepsze rozwiązanie, ale lepsze niż żadne. Taki efekt mozna uzyskać posiadając 2 konstruktory. Jeden z argumentem string x, a drugi z argumentem string x oraz referencji do oryinalnego vectora do którego chcemy to wrzucić.
Wojewodztwo(string x)
{
nazwa_wojewodztwa =x;
}
Wojewodztwo(string x,vector<Wojewodztwo> &vec)
{
vec.emplace_back(x); // następuje wywolanie I konstruktora z parametrem string x
}
Lub jak nie chcesz używac emplace_back to tak:
Wojewodztwo(string x)
{
nazwa_wojewodztwa =x;
}
Wojewodztwo(string x,vector<Wojewodztwo> &vec)
{
vec.push_back(Wojewodztwo(x));
}
I oczywiscie w odpowiednim miejscu przy tworzeniu nowego obiektu Wojewodztwo musimy przsyłać vector jako drugi argument.
vector<Wojewodztwo> w;
Wojewodztwo("Lodzkie",w);
Wojewodztwo("Dolnoslaskie",w);
Poniżej cały program dla testu:
#include <iostream>
#include <vector>
using namespace std;
class Wojewodztwo
{
string nazwa_wojewodztwa;
public:
Wojewodztwo(string x)
{
nazwa_wojewodztwa =x;
}
Wojewodztwo(string x,vector<Wojewodztwo> &vec)
{
vec.push_back(Wojewodztwo(x));
}
string zwroc_nazwe()
{
return nazwa_wojewodztwa;
}
};
int main()
{
vector<Wojewodztwo> w;
Wojewodztwo("Lodzkie",w);
Wojewodztwo("Dolnoslaskie",w);
Wojewodztwo("Slaskie",w);
for(int i=0;i<w.size();i++)
{
cout<<w[i].zwroc_nazwe()<<endl;
}
return 0;
}
Jeżeli ktoś ma bardziej prawidłowy sposób na zrealizowanie tego problemu z chęcią się dowiem jak powinno to być zrobione profesjonalnie