Przeciazenie operatora ()

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?

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?

  1. Pokaż jak wygląda to w klasach
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);
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.

1

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

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