Przeciazenie operatora ()

Przeciazenie operatora ()
LU
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:3
0

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

Kopiuj
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?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1
  1. Po drobnej optymalizacji:
Kopiuj
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

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:4 minuty
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:

Kopiuj
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
LU
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Postów:3
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:

Kopiuj
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.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.