ďťż

Ładny brzuch

j.w.



-> używasz jak objekt jest wsaźnikiem a . jak jest normalnym obiektem

. używamy gdy chcemy odwołać się do metody lub pola obiektu np:
vector<string> v; v.push_back("aaa");

Gdy mamy wskaźnik na obiekt możemy odołać się poprzez -> lub najpierw dereferencja (*) a potem .
vector<string> *v = new vector<string>; v->push_back("aaa"); (*v).push_back("bbb");


-> używasz jak objekt jest wsaźnikiem a . jak jest normalnym obiektem



Chyba chodzi o dereferencje wskaźnika we w wskaźniku na obiekt(1 przypadek) i dereferencje w obiekcie(2 przypadek). Nie wiem czy o to chodzi :)

Na pocztaku myślałem, że to jest do tego, aby uzyskać wartość pola, na które wskazuje wskaźnik w wskaźniku do klasy, która go zawiera: (ale zamotałem)
class a{ public: int*b; }; a* aa=new a; aa->*b=2;
ale kompilator zgłasz błąd: undefined symbol 'b'.
Użytkownik gokudbz edytował ten post 16 marzec 2005, 17:13

Na pocztaku myślałem, że to jest do tego, aby uzyskać wartość pola, na które wskazuje wskaźnik w wskaźniku do klasy, która go zawiera: (ale zamotałem)
class a{ public: int*b; }; a* aa=new a; aa->*b=2;
ale kompilator zgłasz błąd: undefined symbol 'b'.


...


to wiem, ale ja ogólnie chcę się dowiedzieć kiedy używać tych operatorów z gwiazdką na końcu.
no a ja ci mowie ze nie mozna ich uzywac z gwiazdka na koncu, bo w c++ jest to niezgodne ze skladnia jezyka...
wiec ;) mozesz ich uzywac kiedy chcesz dostac errora od kompilatora ;)

Właśnie mnie olśniło !!!
class a{ public: int c; }; a _a, *aa=&_a; int a::*b = &a::c; aa->*b=123;
Ale jak to działa to ja już nie wiem :D

Acha. int pointerval=_a.*b też można :P
Użytkownik Zombiak edytował ten post 16 marzec 2005, 17:58

no a ja ci mowie ze nie mozna ich uzywac z gwiazdka na koncu, bo w c++ jest to niezgodne ze skladnia jezyka...
wiec ;) mozesz ich uzywac kiedy chcesz dostac errora od kompilatora ;)


Jak to nie? przecież takie operatory można nawet przeciążać. a co kodu zombiaka, to naprawdę wątpię, żeby to okazało  się przydatne ;)-możesz to rochę objaśnić?
no dobra dobra ;) kajam siem ;)
faktycznie sa takie operatory :] ale uzyjesz ich moze raz w zyciu i bedzie z nimi i tak klopot :]
anyway wykombinowalem dwa examplesy kiedy moga sie [teoretycznie przydac].
pierwszy kiedy chcesz sobie "skrocic"/"zmienic" nazwe membera:
class dummy {    public:        int bardzo_dluga_i_szpetna_nazwa_pola_klasy_dummy; }; int main() {    dummy obj1, obj2, obj3;    int dummy::*x = &dummy::bardzo_dluga_i_szpetna_nazwa_pola_klasy_dummy;    obj1.*x = 11;    obj2.*x = 12;    obj3.*x = 13;    return 0; }
a drugi jest z funkcja, ktora wywoluje podawane w parametrach metody:
#include <iostream> using namespace std; class dummy {    public:        int doSomething1() {            return 1;        }        int doSomething2() {            return 2;        } }; void showReturnValue ( int(dummy::*func)(), dummy& obj ) {    cout << (obj.*func)(); } int main() {    dummy obj;    showReturnValue( dummy::doSomething1, obj );    showReturnValue( dummy::doSomething2, obj );    cin.get();    return 0; }
of coz przyklady troche naciagane :) ale powanie tych operatorow sie po prostu nie uzywa, rozwiazuje sie problemy w prostszy i bardziej zrozumialy sposob ;) takze ja nawet nie wiedzialem o ich istnieniu jak i pewnie 90% programistow cpp :]
jak ktos znajdzie jakis uzyteczny przyklad zastosowania to wklejac :]

No, i o to mi chodziło ;)
ale szczerze mówiąc nie zamierzam tego używać...

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •