TiAmo [ Pretorianin ]
[C++] Wskaznik do pokazywania na skladniki klasy
Czy jest mozliwosc stworzenia wskaznika ktory bedzie pokazywal na tablice typu char, ktora jest skladnikiem kalsy? O ile w przypadku typow podstawowych(int, float, char) jest to latwe, o tyle nie mam pojecia jak zrobic to dla tablic ;/
peanut [ kriegsmaschine ]
tablica to w rzeczywistosci wskaznik na ciagly obszar pamieci, wiec dla tablicy char bedzie po prostu char* ptr. standardowy wskaznik na skladowa klasy.
TiAmo [ Pretorianin ]
Tzn? Mozesz mi odp na tym przykladzie:
class obiekt
public:
int lolek;
char tablica[20];
;
to o ile do lolka, moge sie dostacw ten sposob:
int obiekt::*wskaz=&obiekt::lolek;
o tyle nie wiem jak skonstruowac taki wskaznik, dla tej tablicy ;/
TiAmo [ Pretorianin ]
upik :>
peanut [ kriegsmaschine ]
po prostu char obiekt::*ptr = &obiekt::tablica ?
TiAmo [ Pretorianin ]
Wlasnie to najlogiczniejsze wyjscie, ale nie dziala ;/ i nie mam pojecia dlaczego :(
peanut [ kriegsmaschine ]
sorry daln ze mnie;P
char* obiekt::*ptr, przeciez to wskaznik na wskaznik;)
TiAmo [ Pretorianin ]
Ale nawet tak nie dziala ;/ nazwa tablicy to adres jej pierwszego elementu, i na takie cos da sie zrobic tego typu wskaznik, na piaty element juz nie, ale na nazwe tak, tylko nie mam pojecia jak
Regis [ ]
Arytmetyka wskaznikow sie klania. Dodajac do wskaznika wartosc N przesuwasz sie o N elementow 'wglab' tablicy.
TiAmo [ Pretorianin ]
Ale co to ma do arytmetyki wskaznikow? Jest zasada ze nie mozna, na wszystkie skladniki klasy pokazywac takim wskaznikiem, np na cos co nie ma swojej wlasnej nazwy. A 5 element tablicy takiej nazwy nie ma.
peanut [ kriegsmaschine ]
to zmien na char* tablica i bedzie dzialac;)
TiAmo [ Pretorianin ]
Tzn?
TiAmo [ Pretorianin ]
upik. Sorry za te up'y, ale zalezy mi na tym, a w ksiazkach mi dostepnych jest tylko wzmianka o tym, a w necie nie moge znalezc. A ten wskaznik zaoszczedzilby mi ponad 200 linijek kodu ;/
Katane [ Useful Idiot ]
Powiedzmy, ze zmienna a to instancja twojej klasy.
char ** wsk = &(a.tablica)
peanut [ kriegsmaschine ]
zamiast char tab[10] zrob char* tab. w devie wyglada tak i sie kompiluje:
#include <cstdlib>
#include <iostream>
using namespace std;
class obiekt
public:
char* tab;
;
int main(int argc, char *argv[])
char* obiekt::*ptr = &obiekt::tab;
system("PAUSE");
return EXIT_SUCCESS;
TiAmo [ Pretorianin ]
peanut -> Ehhh, tak niestety nie wypali, bo to duzy projekt, za duzo zmian by potrzebowal. Qrde glupia "symfonia", niby napisali ze mozna to zrobic, ale nie napisali jak :|
Katane [ Useful Idiot ]
A jesli chodzi o odwolanie sie do 5 elementu tablicy w obiekcie "a" :
char fifth = *(*wsk+5)
peanut [ kriegsmaschine ]
TiAmo [ Pretorianin ]
peanut -> Dzieki wielkie :))
TiAmo [ Pretorianin ]
Sorry, ze troche przynudzam, ale ma ktos pomysl jak takie wskazniki wysylac do funkcji? ^_^
pecet007 [ Talk to the claw ]
TiAmo, ja ci bezpośrednio nie pomogę, ale w C++ faq, jest cały dział o tym ;]
peanut [ kriegsmaschine ]
jesli mozna wiedziec, po co ci ten ambaras ze wskaznikami do publicznych tablic? w ogole jaki sens jest w implementowaniu publicznych tablic w klasach? pytam z czystej ciekawosci bo generalnie nie spotkalem sie z takimi kwiatkami jeszcze ;)
poza tym u mnie kompiluje sie wydumane po najmniejszej linii oporu;P
void f (char (obiekt::*ptr)[10]);
char (obiekt::*ptr)[10] = &obiekt::tab;
f(ptr);
z tego co sobie teraz potestowalem to dla zwyklych obiektow danej klasy i tak latwiej uzywac prymitywnych wskaznikow na typy, bez zasiegu klas po prostu przez .
obiekt A;
char* ptr = (A.tab);
a jeszcze lepiej napisac sobie funkcje ktore to zwracaja z wnetrza klasy i sie nie pierdolic. czekam na odzew;)