Využij akce až 80 % zdarma při nákupu e-learningu. Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu
discount week 80
Avatar
Lukáš Bobka:26.5.2020 0:55

Ahoj, chtěl bych poprosit někoho kdo se lépe orientuje v OOP o radu popř pomoc.

Potřeboval bych nějak šikovně z pole objektů, porovnat objekty dle vlastnosti "velikost" a pokud je stejna tak vrátit ukazatel na objekt.
Napadá mě jen, udělat si objekt s vloženou velikosti, a potom jej postupne porovnávat s objekty v poli. Ale nevim jak na to...Mohl by mi někdo pomoc , vysvetlit. diky moc

např:
nadefinováno pole objektu míčů:

Mic pole_micu[10];

Mic* Hra_s_Micem :: najdi_mic(char* velikost)
{
        //vytvorim si objekt s pozadovanou velikosti
        Mic mic1 = new Mic(velikost)
        //projedu pole
        for(int i=0; i<10; i++){
                //a ted nevim :( , chtěl jsem, projeď pole jestli máš stejný,vrať objekt
        if(pole_micu[i] ==

        }
        return
}

Zkusil jsem: Vše, internet, knižky

Chci docílit: Porozumět

 
Odpovědět
26.5.2020 0:55
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Lukáš Bobka
DarkCoder:26.5.2020 5:22

Chceš najít v poli objekt s danou vlastností, postačí testovat objekty v poli na danou vlastnost. Není k tomu třeba zbytečně zakládat celý nový objekt.

Pokud objekt s danou vlastností v poli existuje, bude mít adresu, pokud nikoli, bude adresa ukazatele NULL. Je třeba si vytvořit ukazatel na objekt a před procházením pole ho nastavit na NULL. Tím se zajistí, že adresa na objekt bude neplatná v případě, že žádný objekt v poli s požadovanou velikostí nenajdeme.

Zde pak je úryvek kódu pro vyhledání objektu s vlastností velikost:

psMIC = NULL;
for (int i = 0; i < SIZE; i++) {
        if (pole_micu[i].velikost == HLEDANA_VELIKOST) {
                psMIC = pole_micu + i;
                break;
        }
}

return psMIC;

SIZE - velikost pole_micu
HLEDANA_VELIKOST - hodnota vlastnosti velikost která se hledá
psMIC - ukazatel na objekt který je stejného typu jako pole_micu.

Nahoru Odpovědět
26.5.2020 5:22
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.5.2020 13:12

Mohlo by to jit zapsat i nejak takhle: (a tem hvezdickam bych se snazil vyhybat, pokud se jedna o int nebo char)

int mylist[] = { 10, 20, 30, 40 };

Mic* Hra_s_Micem :: micSelectByVelikost(int velikost)
    {
    for (auto myitem : mylist)
        {
        if (myitem.velikost == velikost)
            {
            return myitem;
            }
       }
   return null;
}


####
# C++11 allows you to do:

for (const auto& kv : myMap) {
    std::cout << kv.first << " has value " << kv.second << std::endl;
}

# C++17 allows you to do:

for (const auto& [key, value] : myMap) {
    std::cout << key << " has value " << value << std::endl;
}
 
Nahoru Odpovědět
26.5.2020 13:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.