Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2013-11-08 14:36:16

  Kanabinocumulus - Nowy użytkownik

Kanabinocumulus
Nowy użytkownik
Zarejestrowany: 2013-10-31

C++ , Wskaźniki na obiekty.

Dendobry :D
Mam pewno pytanie, mianowicie, jakie płyną korzyści z używania wskaźników na obiekty w c++?
Chodzi o to że możemy za pomocą adresów odwoływać się do pól z modyfikatorem Private, gdzie moglibyśmy odwołać sie tylko za pomoca procedury , zwykłe wskaźniki (na zmienne czy tablice) jakoś pojmuje , ale w obiektach nie mogę tego pojąć :D

Jak to jest panowie z tymi wskaźnikami ?

Offline

 

#2  2013-11-08 17:02:41

  averatec - Użytkownik

averatec
Użytkownik
Zarejestrowany: 2013-10-25

Re: C++ , Wskaźniki na obiekty.

do danych z modyfikatorem private czy to protected nie da sie dostac z zewnatrz obiektu bez zadnej metody typu getter/setter
nie wiem czego tutaj nie rozumiesz, tworzysz sobie instancje obiektu za pomoca operatora new co daje mozliwosc operowania na obiekcie globalnie, bo destruktor nie jest wykonywany w danym zakresie tylko wywoluje go operator delete, a wskaznik jak wskaznik, wskazuje adres do takiego obiektu w pamieci
no i sa pewne roznice w alokowaniu pamieci przy zwyklym tworzeniu obiektu i tym dynamicznym

http://xion.org.pl/productions/ polecam przejrzec sobie artykuly

Ostatnio edytowany przez averatec (2013-11-08 17:14:25)

Offline

 

#3  2013-11-22 17:08:09

  tricum - Użytkownik

tricum
Użytkownik
Zarejestrowany: 2013-11-02

Re: C++ , Wskaźniki na obiekty.

@averatec
owszem da się, zobacz sobie http://programmers.stackexchange.com/questions/2077 … member-or-fri
nie wiem czy to nie jest undefined behaviour, ale technicznie jest to możliwe.
@Kanabinocumulus
Wskaźniki na obiekty przydają się kiedy masz listę obiektów, które dziedziczą po sobie i chcesz odpalać klasy wirtualne. Zobacz sobie http://pl.wikipedia.org/wiki/Metoda_wirtualna
Dodatkowo wskaźniki przydają się w miejscach, w których nie chcesz przekazywać całych ciężkich obiektów jako argumenty funkcji, wskaźnik jest zazwyczaj mniejszy niż cały obiekt(wiem, że to można rozwiązać przez używanie referencji)

Ostatnio edytowany przez tricum (2013-11-22 23:16:00)

Offline

 

#4  2013-11-22 21:32:34

  averatec - Użytkownik

averatec
Użytkownik
Zarejestrowany: 2013-10-25

Re: C++ , Wskaźniki na obiekty.

to co podales jest niezgodne z tym jak stosuje sie wskazniki no i castowanie C to castowanie C a nie C++ (nie wiem dlaczego ludziom ciezko nauczyc sie poprawnie rzutowac typy w C++)

Ostatnio edytowany przez averatec (2013-11-22 21:34:08)

Offline

 

#5  2013-11-22 23:06:56

  tricum - Użytkownik

tricum
Użytkownik
Zarejestrowany: 2013-11-02

Re: C++ , Wskaźniki na obiekty.

Nie pisałem, że jest zgodne z czymkolwiek, chociaż standard nic nie pisze na ten temat (wskaźniki są opisane w części 8.3.1
standardu http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf ). Napisałem jedynie, że takie coś jest technicznie możliwe. Mam nadzieję, że ten kod spełni Twoje wymagania co do poprawności rzutowania http://ideone.com/hceuZT (tak na marginesie poprawiona wersja też działa)

Edit:
celowo zmieniłem typ zmiennej z int na char - teraz użycie reinterpret cast jest w pełni zdefiniowane

Ostatnio edytowany przez tricum (2013-11-23 00:30:03)

Offline

 

#6  2013-11-23 19:18:42

  averatec - Użytkownik

averatec
Użytkownik
Zarejestrowany: 2013-10-25

Re: C++ , Wskaźniki na obiekty.

ok, ale co w wypadku gdy rozbudowujesz klase, wiadomo ze takie stosowanie wskaznikow nie jest najbezpieczniejsza metoda chociaz i tak mozna to robic, bo tak naprawde czym jest wskaznik? adresem, wiec dodajac do niego odpowiedni offset mozna dostac sie do kazdego pola obiektu

@edit
modyfikatory dostepu sa tak naprawde informacja dla kompilatora, wiec nie ma co sie dziwic ze mozna dostac sie w ten sposob do private czy protected pola z poza instancji obiektu

Ostatnio edytowany przez averatec (2013-11-23 19:25:31)

Offline

 

#7  2013-11-24 18:49:20

  tricum - Użytkownik

tricum
Użytkownik
Zarejestrowany: 2013-11-02

Re: C++ , Wskaźniki na obiekty.

Słuchaj nie chodzi mi o to, żeby tego używać. Bo takie zastosowanie wskaźnika może być zgodne ze standardem, ale na pewno nie jest zgodne z założeniami programowania obiektowego. Jedyne o co mi chodziło to to, żeby pokazać, że dostęp do pola private jest technicznie możliwy

Offline

 

#8  2013-11-24 20:00:48

  averatec - Użytkownik

averatec
Użytkownik
Zarejestrowany: 2013-10-25

Re: C++ , Wskaźniki na obiekty.

ok, nie chcialem tutaj niczego kwestionowac, tylko dodalem ze modyfikatory dostepu sa informacja dla kompilatora, czyli sa sprawdzane podczasz kompilacji a nie runtime jak np w javie, a takie zastosowanie wskaznika powinno chociaz generowac warning

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)