Dobrý den,
potřebuji poradit, jak mám udělat vynucení konstruktorem do pole, aby v případě, kdy se vytvoří nový objekt, tak by se museli zadat hodnoty do pole.
Děkuji
#2 ingiraxo
Udělal jsem to takhle, ale nefunguje mi to v tom, že v main můžu vytvořit jenom jeden objekt Předmět a já bych potřeboval 8.
class Predmety{
int m_sila;
public:
Predmety(int sila){
m_sila=sila;
}
};
class Lokace {
array <Predmety*,8> pole ;
public:
Lokace(int sila){
{for(int i = 0; i<(int)pole.size(); i++){
pole[i]=new Predmety(sila);
}
}
}
};
int main()
Lokace*trziste =new Lokace();
#3 Tomáš
já asi nerozumim... však to tržiště má 8 předmětů, sice jsou všechny stejný a kód není skompilovatelný, ale budiž
Ty teda potřebuješ, aby si mohl při vytvoření tržiště definovat jednotlivé předměty přes konstruktor?
class Predmet {
public:
Predmet(int sila) : sila(sila) {}
int getSila() { return sila; }
private:
int sila;
};
class Trziste {
public:
// pres konstruktor predame pole predmetu
Trziste(Predmet* predmety, int pocet) {
this->predmety = vector<Predmet>(predmety, predmety + pocet);
}
vector<Predmet>& getPredmety() { return predmety; }
int getPocetPredmetu() { return predmety.size(); }
private:
vector<Predmet> predmety;
};
int main() {
// predem definovane predmety, ktere umistime na trziste
Predmet predmety[] = {
Predmet(10),
Predmet(20),
Predmet(30)
};
// trziste obsahujici 3 predmety
Trziste trziste(predmety, sizeof(predmety) / sizeof(*predmety));
return EXIT_SUCCESS;
}
Pevně danný počet předmětů bych tam nedával, prostě tolik, kolik jich předáš na tržiště, tolik jich tam bude.. případně do konstruktoru tržiště můžeš přidat podmínku na počet
#5 Tomáš
však to můžeš i teď přes vector...
Predmet p1 = trziste.getPredmety().at(0); // index 0
cout << p1.getSila();
procházet to můžeš jak přes iterátor, tak přes indexy... array je jen více abstraktní obdoba vektoru, jen tady nemusíš definovat velikost a lépe se s tím pracuje
// pres indexy
for (int i = 0; i < trziste.getPocetPredmetu(); i++) {
cout << trziste.getPredmety().at(i).getSila();
}
// pres iterator
vector<Predmet>::iterator it = trziste.getPredmety().begin();
for (; it != trziste.getPredmety().end(); it++) {
cout << it->getSila();
}
#7 Tomáš
jasně.. jen je potřeba přidat další 2 konstruktory pro lepší práci
Trziste(Trziste& trziste) { predmety = vector<Predmet>(trziste.getPredmety()); }
Trziste(vector<Predmet> predmety) : predmety(predmety) {}
a potom...
int main()
{
// predmety pro trziste 1
Predmet predmety[] = {
Predmet(10),
Predmet(20),
Predmet(30)
};
// trziste 1
Trziste trziste1(predmety, sizeof(predmety) / sizeof(*predmety));
// trziste 2 (bude obsahovat stejne predmety jako trziste 1
Trziste trziste2(trziste1.getPredmety());
// trziste 3 (stejne jako trziste 2)
Trziste trziste3(trziste2);
// trziste 4 (bude obsahovat jeden predmet)
Trziste trziste4(vector<Predmet>({ Predmet(50) }));
return EXIT_SUCCESS;
}
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku