Przeciazenie operatora ()

Odpowiedz Nowy wątek
2015-01-02 14:54
0

Witam, przeciążyłem operator () w taki sposób:

int wyswietlanie_liczb::procent_wygranej::operator()(int ilosc, int _nagroda)
{
    int nagroda = 0;
    for (int i = 0; i < ilosc; i++)
    {
        nagroda = nagroda + _nagroda;
    }
    return nagroda;
} 

Mam problem z jego wywoływaniem, utworzyłem wskaźnik na obiekt klasy procent_liczb o nazwie temp i przy próbie wywołania w taki sposób ,,temp->zmienna_typu_int(zmienna1, zmienna2) wyskakuje mi error o treści: Error: "expression preceding parentheses of apparent call must have (pointer-to) function type". Czy mógłby ktoś mi powiedzieć co robię źle i jak powinno wyglądać poprawne wywołanie?

Pozostało 580 znaków

2015-01-02 15:03
1
  1. Po drobnej optymalizacji:
    int wyswietlanie_liczb::procent_wygranej::operator()(int ilosc, int _nagroda)
    {
    return ilosc*_nagroda;
    }

    pojawia się pytanie: - Czy na pewno potrzebujesz tego operatora?

  2. Luffft napisał(a):

    ... utworzyłem wskaźnik na obiekt klasy procent_liczb o nazwie temp ...
    a jaki to ma związek z podanym kodem?

  3. Pokaż jak wygląda to w klasach

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2015-01-02 15:15
0

A ja dodam, że by wywołać ten operator potrzebujesz obiekt typu: wyswietlanie_liczb::procent_wygranej, więc nie wiem czemu piszesz o "wskaźnik na obiekt klasy procent_liczb".
Definiujesz operator dla klasy wewnętrznej (zwykle oznacza to klasę prywatną), ergo definiowanie takiego operatora, ma małe znaczenie praktyczne.
Czy obiekt klasy procent_wygranej jest używany poza wyswietlanie_liczb? IMO nie powinien, ergo operator jest zbędny.

Wygląda na to, że jesteś na początku uczenia się programowania. Ja rozumiem, że przeładowywanie operatorów to taki ładny błyszczący kawałek funkcjonalności C++ i większość początkujących rzuca się na niego jak wygłodniały pies na starą kość. Przeładowywanie operatorów jest ci naprawdę niepotrzebne i tylko będzie ci utrudniać życie.

Jeśli jednak się upierasz to raczej powinieneś mieć coś takiego:

wyswietlanie_liczb::procent_wygranej cos;
cos(123, 123123);
// albo
wskaźnik_na_wyswietlanie_liczb->jakiesPoleTypu_procent_wygranej(2,123);

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 3x, ostatnio: MarekR22, 2015-01-02 15:22

Pozostało 580 znaków

2015-01-02 15:53
0

Pomyłka przy pisaniu postu, wskaźnik obiektu na procent_wygranej. Może dorzucę jeszcze główny zarys jak to wygląda w klasach:

class wyswietlanie_liczb
{
    ....
public:
    class procent_wygranej
    {
        int zmienna_typu_int;
    public:
        ...
        int operator()(int, int);
    };
    ...
}; 

Właściwie to tak jestem jeszcze początkujący ale niestety profesor na studiach narzuca szybkie tempo i obecnie chcąc czy nie chcąc muszę mu pokazać w programie, że rozumiem jak działają przeciążenia danych operatorów.

Pozostało 580 znaków

2015-01-02 16:03

No to nie widzę żadnego problemu:
http://ideone.com/HH9vl7
Chyba że nie rozumiesz czym jest ten operator i jak go wywołać.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0