Załóżmy, że mamy następującą klasę:
class T
{
public:
int a;
int tab[10];
int *wsk;
T()
{
wsk = new int[10];
for(int i = 0; i < 10; i++)
{
wsk[i] = 0;
tab[i] = 0;
}
a = 0;
};
Teraz chciałbym zdefiniować wskaźnik na każdą ze składowych tej klasy. Chciałem to zrobić przez analogię do zwykłych wskaźników, np:
int tab[10];
int *wsk = tab; // lub &tab[0]
Jednak wygląda na to, że zapis wskaźników do składników klasy nie jest zbyt intuicyjny.
Co do zmiennej "a" nie ma problemów:
T object;
T *objectD = new T();
int T::*wskA = &T::a;
cout<<object.*wskA; // lub cout<<objectD->*wskA;
Wskaźnik na tablicę "tab" wewnątrz klasy T chciałem zapisać tak jak na zwykła tablicę, ale z operatorem zakresu :
int T::*wskTab = T::tab; // lub &T::tab[0];
jednak zapis taki okazał się błędny.
Ostatecznie doszedłem do tego, że deklarację wskaźników powinienem zapisać tak, jednak nie jestem do końca pewien:
int (T::*wskTab)[10] = &T::tab; // przypisanie do zwykłego wskaźnika czegoś w stylu "&tab" jest błędne, więc zastanawia mnie jak to tutaj działa
int *(T::*wskWsk) = &T::wsk;
Czy powyższe definicje są poprawne ? Jak wytłumaczyć różnice w definiowaniu zwykłych wskaźników, a wskaźników do składników klasy (zapis przez analogię do zwykłej tablicy tab był błędny).
Jak odczytać wartości ze wskaźników wskTab i wskWsk ? ( wykorzystując obiekt tej klasy, tak jak to zrobiłem dla zmiennej "a")