• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wykonywanie funkcji na rzecz obiektu klasy spełniającego dany warunek

–1 głos
116 wizyt
pytanie zadane 8 lipca 2020 w C i C++ przez Drożdżówka Obywatel (1,950 p.)

Witam!

Zadaję to pytanie na tym forum już chyba od trzech tygodni i nadal nikt mi na nie nie odpowiedział.

Ów pytanie dotyczy obiektowego C++, a brzmi ono "Jak wykonać funkcję na rzecz obiektu, który spełnia dany warunek?"

Chodzi mi o to, że gdy, np. na stronie internetowej wyszukujemy produkt w sklepie i wpisujemy, chociażby "jabłko", to wtedy strona nam wypisuje zawartość zmiennej string, obiektu jabłko, ponieważ zmienna tego obiektu string jest równa właśnie "jabłko".

Pozdrawiam!

1
komentarz 8 lipca 2020 przez adrian17 Ekspert (323,380 p.)

Zadaję to pytanie na tym forum już chyba od trzech tygodni

Pomijając fakt że pytanie brzmi tak samo dziwnie jak wtedy, to... dostałeś wtedy odpowiedź. Co jest w niej nie tak?

void wyswietl_zlapane(const std::vector<Pokemon> &vector) {
    for (const auto &pokemon : vector) {
        if (pokemon.catched())
            wyswietl_nazwe(pokemon);
    }
}

Lub analogicznie:

Wypisz zawartość zmiennej string tylko tych obiektów klasy Przedmiot, których zmienna id=1000.

void wyswietl_id_1000(const std::vector<Przedmiot> &vector) {
    for (const auto &przedmiot : vector) {
        if (przedmiot.id == 1000)
            wyswietl(przedmiot.jakis_string);
    }
}

 

komentarz 8 lipca 2020 przez Drożdżówka Obywatel (1,950 p.)
Chodzi mi o, to że nikt mi nie wytłumaczył jak to działa...

Wklejenie kodu bez wytłumaczenia nie rozwiąże problemu, a poza tym co jest takiego niezrozumiałego w moim pytaniu?
1
komentarz 8 lipca 2020 przez adrian17 Ekspert (323,380 p.)

Chodzi mi o, to że nikt mi nie wytłumaczył jak to działa...

Ale nie napisałeś, że nie rozumiesz wklejonego kodu - ludzie założyli że zrozumiałeś, więc nic nie tłumaczyli.

Robi... dokładnie to o co poprosiłeś:

Wypisz zawartość zmiennej string tylko tych obiektów klasy Przedmiot, których zmienna id=1000.

Funkcja robi pętlę po obiektach klasy Przedmiot, jeśli ich id jest 1000 to wypisuje ich jakieś pole stringowe.

a poza tym co jest takiego niezrozumiałego w moim pytaniu?

Jedno, że "wykonać funkcję na rzecz obiektu" to ogólnie dziwna forma i ciężko się domyślić co znaczy - nikt tak nie mówi. Pierwsza moja interpretacja jest taka jaką wrzucił Piotr Batko niżej, ale... założyłem optymistycznie że pytasz o coś bardziej wyrafinowanego :) Tylko wciąż nie wiem co.

komentarz 9 lipca 2020 przez Drożdżówka Obywatel (1,950 p.)
Dzięki za down vote'y. Community tego forum jest bardziej toksyczne niż serwery CS:GO :P.
1
komentarz 9 lipca 2020 przez adrian17 Ekspert (323,380 p.)
Dostajesz długie odpowiedzi z przykładami kodu (w których nie wyjaśniasz, co Ci nie pasuje). Jedna osoba kliknęła strzałkę w dół, prawdopodobnie dlatego że to duplikat pytania którego treść się od tego czasu nie poprawiła.

To nie jest toksyczność; staramy się być merytoryczni i oczekujemy tego samego od innych ;)

2 odpowiedzi

+1 głos
odpowiedź 9 lipca 2020 przez Lewo Gaduła (3,000 p.)
Nie piszę w C++, ale jeśli dobre rozumiem chcesz napisać metodę danej klasy która sprawdzi obiekty tej klasy.
To tak nie działa -> Obiekt danej klasy nie zna innych obiektów danej klasy i wie tylko o sobie (jednym egzemplarzu klasy).

Raczej jest klasa które te np. jabłka tworzy i przechowuje ich listę. Wtedy wyszukanie takich obiektów to operacja na liście (możesz sobie napisac metodę która sobie przejrzy tą listę obiektów). Możesz tez robić jakieś kombinacje z metodami/polami statycznymi, ale to raczej nie będzie dobre.

Jak masz klasę Produkt i w nim pole string Nazwa, to gdzieś masz klasę DostepneProdukty czy coś takiego gdzie jest kolekcja tych produktów. Wtedy tak jak pisałem wyżej - iterujesz po liście tych obiektów i sprawdzasz pole Nazwa.
0 głosów
odpowiedź 8 lipca 2020 przez Piotr Batko Stary wyjadacz (13,190 p.)

Chyba nie rozumiem pytania... robi się to if-em...

std::string content = "apple";
if (content == "apple")
{
  doSomething(content);
}

Jak wykonać funkcję na rzecz obiektu, który spełnia dany warunek?

 W powyższym kodzie funkcja funkcja doSomething zostanie wywołana dla obiektu content, gdy ten spełni warunek content == "apple". O to Ci chodziło?

komentarz 8 lipca 2020 przez Drożdżówka Obywatel (1,950 p.)
Nie, chodziło mi o to, że chcę wiedzieć jak zrobić coś takiego, że program sprawdza po kolei zawartość zmiennej x każdego obiektu klasy i np. wykonuje funkcje na rzecz obiektu, którego zmienna x wynosi 100.
komentarz 8 lipca 2020 przez Piotr Batko Stary wyjadacz (13,190 p.)

Obejrzyj te materiały:

  1. Jak sprawdzić, czy obiekt spełnia warunek (https://www.youtube.com/watch?v=hXLbgSh1Wo0)
  2. Jak napisać pętlę, żeby móc wykonywać operacje cyklicznie (https://www.youtube.com/watch?v=y6GOYVTVvqo)
  3. Jak przygotować sobie zbiór obiektów (https://www.youtube.com/watch?v=Rt1HnMdzINo)
komentarz 8 lipca 2020 przez Drożdżówka Obywatel (1,950 p.)
Ale ja już dawno opanowałem zagadnienia z tych filmów...
komentarz 8 lipca 2020 przez Drożdżówka Obywatel (1,950 p.)
Ale ja nie chcę sprawdzać po kolei każdego obiektu, nie ma jakiejś funkcji czy coś? Może jest jakieś inne rozwiązanie mojego problemu.
komentarz 8 lipca 2020 przez Piotr Batko Stary wyjadacz (13,190 p.)

(...) chodziło mi o to, że chcę wiedzieć jak zrobić coś takiego, że program sprawdza po kolei zawartość zmiennej x każdego obiektu klasy i np. wykonuje funkcje (...)

10 minut później

Ale ja nie chcę sprawdzać po kolei każdego obiektu (...)

Zadaj proszę precyzyjnie pytanie.


(...) nie ma jakiejś funkcji czy coś?

 Zobacz std::find_if.

komentarz 8 lipca 2020 przez Drożdżówka Obywatel (1,950 p.)
W mógłbyś mi wytłumaczyć jak jej używać, bo jedyne co znajduje na jej temat to filmy jakiś dziwnych Azjatów ;-;. Tak chyba teraz już mogę siebie nazwać programistą, zaliczyłem ten etap.
komentarz 8 lipca 2020 przez adrian17 Ekspert (323,380 p.)

Mati, wciąż nie wyjaśniłeś czy

void wyswietl_id_1000(const std::vector<Przedmiot> &vector) {
    for (const auto &przedmiot : vector) {
        if (przedmiot.id == 1000)
            wyswietl(przedmiot.jakis_string);
    }
}

czy to rozumiesz i czy to robi to, co chcesz. Bo jak nie, to std::find_if też nie pomoże (bo robi praktycznie to samo).

Natomiast z mojej strony to jest bezpośrednia odpowiedź na pytanie

Wypisz zawartość zmiennej string tylko tych obiektów klasy Przedmiot, których zmienna id=1000.

Podobne pytania

–1 głos
0 odpowiedzi 93 wizyt
0 głosów
3 odpowiedzi 781 wizyt
pytanie zadane 5 kwietnia 2020 w C i C++ przez nanautzin Obywatel (1,010 p.)
0 głosów
1 odpowiedź 97 wizyt

89,693 zapytań

138,297 odpowiedzi

309,243 komentarzy

59,623 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...