Može li mi neko objasniti pokazivace i klase u C++.
Može li mi neko objasniti pokazivace i klase u C++.
Pa, dobro da nisi zatražio da ti netko napiše knjigu.
Budi konkretniji, što te točno zanima (a da nije bezbroj puta ovdje objašnjeno)?
Nešto osnovno neke primjere XD
Ispričavam se autoru ,ali napisao sam veliki post o pokazivačima i u pokušaju slanja bug je jednostavno pao i napravio ovo dolje na slici,i zato dok ne dođem sebi od
toga da se bug forum malo kvari ,pošaljem kad se smirim jer već par puta pri slanju mi se javljaju ovakvi problemi.
neprocjenjivo, ha?
Ispričavam se autoru ,ali napisao sam veliki post o pokazivačima i u pokušaju slanja bug je jednostavno pao i napravio ovo dolje na slici,i zato dok ne dođem sebi od
toga da se bug forum malo kvari ,pošaljem kad se smirim jer već par puta pri slanju mi se javljaju ovakvi problemi.
To bi mogao biti ozbiljan problem s IE8 (ako dobro vidim), jer meni se to nije nikada dogodilo
ni s operom, firefox ili chrome ...
Evo ,sad sam samo onako na brzinu o pokazivačima ...možda se autor niti ne snađe ,ali bar sad može reći konkretno što ne razumije o pokazivačima ,a i mi se možemo nadograditi.....hmmmm u pitanju je bio IE8 i to kad sam cijeli kod napisao i VS osmici (copy-paste) i pokušao poslati..kad ono rušenje foruma ,ne IE8-mice...ona je i dalje šljakala .Zato sad samo u notepadu pišem i postam ovdje ,relativno je nerazumljivo ali sam autor sad može zaključiti što to ne razumije i konkretno postaviti pitanje ,jer se ovako može napisati cijela knjiga...
Pokazivač je objekt koji pokazuje na drugi objekt ili objekte,
Pokazivač sadržava adresu objekta na koji pokazuje. Znači mi pokazivaču da bi omogučili njegovu djelatnost pokazivanja na nešto(objekt) ,
moramo dodijeliti adresu tog objekta.To pokazivaču dodojeljujemo &-adresnim operatorom.
Znači deklaracija pokazivača:
int *p;
ili
int* p
Tto nam deklarira da smo deklarirali pokazivač koji pokazuje na neki objekt tipa int.
Znači sad samo trebamo deklarirati neki int objekt ;
int broj = 45;
....sad da bismo adresu dodijelili tom pokazivaču moramo to ovako napraviti;
p=&broj;
ali da bismo došli do broja nije dovoljno napisati :
cout<<p;
Treba se izvršiti dereferenciranje pokazivača da bismo došli to broja na toj adresi;
cout<<*p<<endl;
i to sad ispisuje broj 45...
Znači uzimanje adrese(reference ) je p=&broj;
a pokazivanje broja na toj adresi je *p....
(dereferenciranje)....upamti ta dva izraza...
Isti pokazivač možemo preusmjeriti i na drugu adredsu ako deklariramo još jedan broj tipa
int i onda samo preusmjerimo pokazivač na tu adresu...itd itd...
Ovo je samo mali dio o pokazivačima ,sad ti reci što tebi nije jasno .
Recimo int** znači da je to tip pokazivač koji pokazuje na pokazivač tipa int koji pokazuje na
tip int...vrši se dvostruko dereferenciranje.....
recimo....
int **pp ---pp je tipa pokazivač na pokazivač tipa int
Što to znači....znači da taj **pp mora ukazivati na neki int* p a ne na int p.
npr :
int x=0;
int *p=&x;
int** pp;
pp=&p;
*p=5; p pokazuje na x i sad x postaje 5
**pp=8; pp pokazuje na p,p pokazuje na x i sad x postaje 8 radi dvostrukog
dereferenciranja!
Da , bio sam si dao truda ,i lijepo to s primjerima pokazao u kodu ,kad ono banana...a to nisam niti sačuvao jer mi nije baš potrebno, osim toga tlak mi je bio na visini zbog toga , tako da sam sve zbrisao ....znate ono kad vam ne ide pa želite spaliti komp..........eto ..neka sad pita konkretno a ne općenito....
Sad probaj razumjeti kod liniju po liniju :
#include <iostream>
using namespace std;
/*Deklaracija pokazivaca*/
int main()
{
//int *pokazivac;
//ili
//int* pokazivac2;
//a ovo je deklaracija pokazivaca i varijable u jednom redu
int *pokazivac3 , broj =100;
//ovo je dakle int broj na kraju reda ;
//sad treba pokazivac usmjeriti na adresu od broja
pokazivac3 =&broj;
cout<<(int)&broj<<" : ovo je adresa na kojoj se nalazi broj."<<endl;//ovdje samo kastao da se bolje razumije
//&adresni operator
//sad pokazivac pokazuje na broj
cout<<broj<<" : Ispis broja"<<endl;;
//ovo ce samo pokazivati znaci adresu
cout<<(int)pokazivac3<<" : ispis adrese na kojoj je broj i pokazivac preusmjeren"<<endl;
//da bi došli do broja na toj adresi moramo dereferencirati adresu
cout<<*pokazivac3<<" : dereferenciranje pokazivača"<<endl;
//sad valjda vidiš što radi pokazivac...
//adresni operator je referenca na memorijsku lokaciju gdje je smješten broj
//sad možeš raditi s pokazivačem što želiš
//sad smo ga preusmjerili na drugu adresu.
cout<<endl;
cout<<"Sad isti postupak kao i gore ali s drugim brojem i adresom: "<<endl;
int broj2=45;
cout<<(int)&broj2<<endl;
pokazivac3=&broj2;//sad je na drugoj adresi
cout<<(int)&broj<<endl;// a adresa broja je ista(onog prvog)
cout<<(int)pokazivac3<<endl;
//ja sam samo kastao u int tip da ti bude razumljivije adresiranje
//sad možemo i raditi s pokazivačem
cout<<(*pokazivac3)+5<<" : rad s brojem ali preko pokazivača"<<endl;
cout<<broj2<<" : dok je sam broj na adresi ostao isti"<<endl;//a bro ostaje isti.
//ovo je samo da razumiješ kako pokazivači rade i što oni "uzimaju"...sad moraš reći što
//ti točno nije jasno.
//sory možda na primjeru ali sam gledao da bude razumljiviji samo sa pokazivačima
cout<<"-------------------------------------------\n"<<endl;
cout<<endl;
int broj3=23;
int **pp;
int *p=&broj3;
pp=&p;
cout<<"Nakon preusmjeravanja pokazivača ,svi pokazuju na isto!!"<<endl;
cout<<**pp<<endl;
cout<<*p<<endl;
cout<<broj3<<endl;
(*p)++;//unarni operator na pokazivaču
*p=(*p) + 5;//operator zbrajanja nad pokazivačem
// cout<<(p + 5)<<" : ovo nije aritmetika pokazivaca jer to je povacanje adrese
//a to naravno nije uredu!!" <<endl;
//znači lijeva i desna strana mora biti istog tipa jer p=(*p) + 5 bi ukazao na grešku
//probaj razumjeti zašto??
cout<<*p<<endl;
cout<<**pp<< ": sve što smo radili s pokazivačem ima znači efekt i na **pp"<<endl;
cout<<endl;
*p=45; //dodjeljivanje pokazivaču nova vrijednost ,naravno pokazuje na adresu broja
cout<<*p<<endl;
cout<<**pp<<endl;
cout<<broj3<<endl;
}
Ako sam što krivo napisao ...ispravite me ......ili dodajte za odgovor autoru bar o pokazivačima.
Ne znam sadrzajno kakvo je, ne stignem citat sad, vjerujem dobro i dovoljno, al mogao si samo jos koji enter lupit tu i tamo da bude preglednije.
Ma uredim ja to sutra navečer jer sad jednostavno nemam vremena pa lijepo sve seređeno ponovo pošaljem
Pa, dobro da nisi zatražio da ti netko napiše knjigu.
Budi konkretniji, što te točno zanima (a da nije bezbroj puta ovdje objašnjeno)?
he he he...a jesi mu reko, bole me vilice od smjeha :) hehe- a i pitanje je na prvu jako smijesno!
jedno pitanje da li morao program raditi ili ima toga za skinuti...dakle treba mi nešto što će automatski brisati smeće(recycle bin
jedno pitanje da li morao program raditi ili ima toga za skinuti...dakle treba mi nešto što će automatski brisati smeće(recycle bin
Najlakse ti je preko ove male skripte, evo slozio za tebe, radi na win2000->win7.
Najbolje ti je staviti da ti se brise pri shutdownanju, ovako:
run -> gpedit.msc -> Computer Configuration -> Windows Settings -> Scripts (Startup/Shutdown) -> Shutdown
->proerties -> i pod add.. -> browse, i dodas skriptu.