GRY-Online.pl --> Archiwum Forum

[C++] Wskaznik do pokazywania na skladniki klasy

04.05.2007
21:45
[1]

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 ;/

04.05.2007
21:50
[2]

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.

04.05.2007
21:56
[3]

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 ;/

04.05.2007
22:09
[4]

TiAmo [ Pretorianin ]

upik :>

04.05.2007
22:16
[5]

peanut [ kriegsmaschine ]

po prostu char obiekt::*ptr = &obiekt::tablica ?

04.05.2007
22:29
[6]

TiAmo [ Pretorianin ]

Wlasnie to najlogiczniejsze wyjscie, ale nie dziala ;/ i nie mam pojecia dlaczego :(

04.05.2007
22:35
[7]

peanut [ kriegsmaschine ]

sorry daln ze mnie;P
char* obiekt::*ptr, przeciez to wskaznik na wskaznik;)

04.05.2007
22:38
[8]

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

04.05.2007
22:40
[9]

Regis [ ]

Arytmetyka wskaznikow sie klania. Dodajac do wskaznika wartosc N przesuwasz sie o N elementow 'wglab' tablicy.

04.05.2007
22:45
[10]

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.

04.05.2007
22:50
[11]

peanut [ kriegsmaschine ]

to zmien na char* tablica i bedzie dzialac;)

04.05.2007
22:54
smile
[12]

TiAmo [ Pretorianin ]

Tzn?

04.05.2007
23:58
[13]

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 ;/

05.05.2007
00:04
[14]

Katane [ Useful Idiot ]

Powiedzmy, ze zmienna a to instancja twojej klasy.
char ** wsk = &(a.tablica)

05.05.2007
00:05
[15]

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;

05.05.2007
00:11
[16]

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 :|

05.05.2007
00:17
[17]

Katane [ Useful Idiot ]

A jesli chodzi o odwolanie sie do 5 elementu tablicy w obiekcie "a" :

char fifth = *(*wsk+5)

05.05.2007
00:30
[18]

peanut [ kriegsmaschine ]

05.05.2007
00:57
[19]

TiAmo [ Pretorianin ]

peanut -> Dzieki wielkie :))

05.05.2007
01:18
[20]

TiAmo [ Pretorianin ]

Sorry, ze troche przynudzam, ale ma ktos pomysl jak takie wskazniki wysylac do funkcji? ^_^

05.05.2007
01:20
[21]

pecet007 [ Talk to the claw ]

TiAmo, ja ci bezpośrednio nie pomogę, ale w C++ faq, jest cały dział o tym ;]

05.05.2007
13:12
[22]

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;)

© 2000-2024 GRY-OnLine S.A.