[C++] wywołanie przeciążonych operatorów


(Blady214) #1

Witajcie,

mam kolejny problem z moim programem, a mianowicie chodzi o wywołanie przeciążonych operatorów. Muszę przeciążyć kilka operatorów i mam problem z ich wywołaniem, przykładowo, jeśli przeciążam operator [], to powinienem go wywoływać na zasadzie obiekt_, lecz takie wywołanie u mnie nie działa. W jego miejsce postanowiłem to na około wywołać, czyli obiekt->operator[](i) i to już działa._

Problem mam z operatorem [] oraz (). Poniżej kody źródłowe operatorów:

string userGroup::operator[] (int n)

{

	string val;

	val = restaurantUsers[n]->login;

	cout<
	return val;

}

bool userGroup::operator()(string login, string passwd)

{

	if (groupCounter)

	{

		for (int i=0;i
		{

			if (restaurantUsers[i]->compareCredentials(login,passwd)) 

			{

				return true;

			}

		}return false;

	}else return false;

}

I wywołanie:

void restaurant::test()

{

	admin->operator[](0);

	if (admin->operator()("Administrator","admin")) cout<<"It works!";

	//admin[0]; -> nie działa, dlaczego?

}

admin jest obiektem klasy userGroup (userGroup *admin;) zadeklarowanym wewnątrz innej klasy. Co zrobić, aby te operatory poprawnie działały?


(Rolek0) #2

Nie , nie jest. Jest wskaźnikiem na obiekt klasy userGroup.

(*admin)[1];

//lub

userGroup& a = *admin;

a[1];

(Blady214) #3

Ok, racja, mój błąd, to w jaki sposób zmienić deklaracje operatora, żebym mógł go bezpośrednio dla wskaźnika wywoływać?


(Rolek0) #4

Nie da się. Z resztą, przeciążenie [] dla wskaźników popsułoby indeksowanie tablic.

Dereferuj wskaźnik albo dopisz sobie zwykłe metody robiące to samo co te operatory (nie kopiuj kodu, jedne mogą korzystać z drugich).

A jeśli nie potrzebujesz zmieniać, na który obiekt wskazujesz, to użyj referencji zamiast wskaźnika.