Vynuceni pole konstruktorem – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vynuceni pole konstruktorem – C / C++ – Fórum – Programujte.comVynuceni pole konstruktorem – C / C++ – Fórum – Programujte.com

 

Tomáš
~ Anonymní uživatel
560 příspěvků
21. 11. 2014   #1
-
0
-

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

Nahlásit jako SPAM
IP: 91.219.240.–
ingiraxo+15
Grafoman
21. 11. 2014   #2
-
0
-

#1 Tomáš
Konstruktor s parametrem pole?

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tomáš
~ Anonymní uživatel
560 příspěvků
21. 11. 2014   #3
-
0
-

#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();
Nahlásit jako SPAM
IP: 188.75.144.–
ingiraxo+15
Grafoman
21. 11. 2014   #4
-
0
-

#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

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tomáš
~ Anonymní uživatel
560 příspěvků
22. 11. 2014   #5
-
0
-

#4 ingiraxo
Ano potřebuji při vytvoření objektu ze třídy lokace si nadefinovat předměty přes konstruktor, ale potřebuji to přes array, abych mohl pracovat s indexi toho pole. 

Nahlásit jako SPAM
IP: 188.75.144.–
ingiraxo+15
Grafoman
22. 11. 2014   #6
-
0
-

#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();
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tomáš
~ Anonymní uživatel
560 příspěvků
22. 11. 2014   #7
-
0
-

#6 ingiraxo
A půjde pomocí třídy Trziste udělat objekt třeba Trziste1 kam by se předali do toho pole ty předměty a pak třeba objekt Trziste2 kam by se předali jiný předměty?

Nahlásit jako SPAM
IP: 188.75.144.–
ingiraxo+15
Grafoman
22. 11. 2014   #8
-
0
-

#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;
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 74 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý