Ovako napamet sad kad gledam... d3 ima vrijednost 42 i pri pozivu funkcije addone taj objekt predaješ (kopiraš) njenom parametru d (također objektu tipa demo). Tad se ispisuje copy constructor(42). Povratna vrijednost funkcije je također objekt demo pa se pri konačnom stvaranju d4 opet poziva copy konstruktor - copy constructor(43) - poziv funkcije addone je povećao vrijednost za 1. U pravilu, sve ono što si ti već rekao..
Programiranje u C++-u - pitanja i odgovori
- poruka: 7.285
- |
- čitano: 1.703.029
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Probavo sam sam rješiti ali nije išlo. Točnije kad unosim broejve mogu unositi do besvjesti. Nikad da petlja prekine a znam da je uvjet u petlji dobar.
reka san da ne znan ama bas nista i da cu sam pokusat priko tutorijala naucit...
a tebi ako je danas los dan ili si se diga na na livu nogu lici svoje frustracije negdi drugo...pravi si drnde,nisi moga izabrat bolji nick.
i dobro si ga reka... a jesan ispa nepristojan prije, da ti za ispriku izguglam neki video tutorijal ?
ne triba sve ok,iman sve tutorijale
Ja sam u MS VS-u opalio break point na d4 i sa buttonom F11 išao korak po korak.
Dobio sam sljedeći rezultat:
D4 -
1 . poziva konstruktor kopije vraća x - 42 i opet ide u main
2. poziva funkciju addone x povećava na 43
3. iz addone vraća u konstruktor kopije x ostaje 43
imaš ispisan slijed 42 - 43 jer ti jedino ispisuje vrijednost u konstruktoru kopije - a u funkciji addone nema ispisa.
addone je funkcija , naravno -ne konstruktor
dakle - ovdje je funkcija addone "zakomplicirala" stvari - vraća objekt koji poziva konstruktor kopije
Ja sam u MS VS-u opalio break point na d4 i sa buttonom F11 išao korak po korak.
Dobio sam sljedeći rezultat:
D4 -
1 . poziva konstruktor kopije vraća x - 42 i opet ide u main
2. poziva konstruktor addone x povećava na 43
3. iz addone vraća u konstruktor kopije x ostaje 43
Znaci ako sam dobro skuzio ispis je isto kao i meni?
default constructor
copy constructor(0)
constructor(42)
copy constructor(42)
copy constructor(43)
Malo sam istrazival, naime Standard dozvoljava kompajlerima da maknu nepotrebne pozive konstruktora kopije (onda ne bi ispisalo predzadnju liniju copy constructor(42)), ali ne rade svi kompajleri tu optimizaciju na svoju ruku, vecini treba dati switch kojim se naznacuje da se zeli takva optimizacija.
Pri samoj predaji objekta d3 funkciji addon poziva se copy-konstruktor . Vrlo lako za provjeriti:
void addone(demo d)
{
//
}
demo d3(10);
addone(d3);
Pozdrav svima..
Trenutno razvijam program za 3d rekonstrukciju scene iz više 2d slika. Zapeo sam na jednom dijelu gdje želim te slike prikazati u obliku galerije. Ono što je specifično je to da želim
kada stisnem tipku end da ode na zadnju sliku iz galerije, tipka home prva slika iz galerije, page up iduča slika,page down prethodna slika. Do sada sam napravio ovo:
//u hederu
IplImage *m_Input[50];
//u glavnom programu
int v=1;
CString ff;
ff.Format ("%d",v);
const TCHAR* cstr = (LPCTSTR)ff;
ShowImage(cstr,m_Input[v]);
do{
if(GetAsyncKeyState(VK_END))
{
cvDestroyWindow(cstr);
v=50;
ff.Format ("%d",v);
const TCHAR* cstr = (LPCTSTR)ff;
ShowImage(cstr,m_Input[v]);
}
if(GetAsyncKeyState(VK_HOME))
{
cvDestroyWindow(cstr);
v=1;
ff.Format ("%d",v);
const TCHAR* cstr = (LPCTSTR)ff;
ShowImage(cstr,m_Input[v]);
}
if(GetAsyncKeyState(VK_PRIOR))
{
cvDestroyWindow(cstr);
if (v==50)
{
v=1;
}
if(v<50)
{
v++;
}
ff.Format ("%d",v);
const TCHAR* cstr = (LPCTSTR)ff;
ShowImage(cstr,m_Input[v]);
}
if(GetAsyncKeyState(VK_NEXT))
{
cvDestroyWindow(cstr);
if (v==1)
{
v=50;
}
if (v > 1)
{
v--;
}
ff.Format ("%d",v);
const TCHAR* cstr = (LPCTSTR)ff;
ShowImage(cstr,m_Input[v]);
}
if(GetAsyncKeyState(VK_ESCAPE))
{
break;
}
}while(true);
Nažalost ovaj kod ne radi baš ono što bih ja htio.
Prvi problem je taj što kad stisnem page up ili page down on mi premota jedno 3-4 slike u šutu kao da sam držao tipku malo duže pa je primio više signala pa ih je tako i prebacio..
Zna li itko zašto je to tako?
A drugi problem je taj što mi uopce ne prikaže slike nego samo prazan prozor u kojemu inače budu slike,još je zanimljivije to kada stisnem escape za izlazi iz while petlje TEK onda mi prikaže sliku za zadnju vrijednost v varijable. Za ovaj drugi problem jedan programer mi je rekao da je to tako zbog toga što je kod u beskonačnoj while petlji pa program nema vremena uploadati sliku, i napomenuo mi je da koristim WM_KEYDOWN message handler. Ja sam malo tražio po netu o toj temi, ali meni je to jako zbunjujuče budučui da sam početnik. Moje pitanje je dali je to moguče to napraviti pomoču while petlje ili baš moram koristit message handler?
To je zato jer koristiš GetAsyncKeyState. Ta funkcija radi na nivou cijelog OS-a i hvata tipke bilo da su stisnute unutar tvoje aplikacije ili negdje drugdje (što može prouzročiti ogroman bug u tvojoj aplikaciji) te nerjetko procesira višestruke poruke za dohvat pritisnute tipke. Umjesto toga koristi OnKeyDown ili OnKeyUp evente.
Ima nekog smisla..
Nego hoces mi reči kako se koristi, jer sam ti ja totalni početnik.
Probao sam stavit OnKeyDown umjesto GetAnsiKeyState, no to nemože tako.. potrebno je deklarirati ili nešto
Hočeš li mi molimte napisati kako bi to trebalo iči plsss
Sama forma (CDialog u MFC-u) bi trebala imati evente tipa OnKeyDown i OnKeyUp. Unutar njih se detektira koja tipka je pritisnuta i što bi tada trebalo raditi.
http://msdn.microsoft.com/en-us/library/983st27a%28v=vs.80%29.aspx
Da li mi neko moze napisat program za c++ koji izracunava povrsinu i obim pravougaonika
Da li mi neko moze napisat program za c++ koji izracunava povrsinu i obim pravougaonika
Reci da se šališ! Zar ne znaš osnovne naredbe C++-a? Zar ne znaš kako se izračunava površina i opseg pravokutnika? Gdje je problem?
To ti je onaj problem kod odgoja djece - Kada djete naučiš da mu sve ti radiš, onda se nauči i tako za svaku sitnicu čeka da mu drugi uradi, kao npr.
Ovo nije za mene......
Da li mi neko moze napisat program za c++ koji izracunava povrsinu i obim pravougaonika
Sve se moze dogovoriti. Ponudu (novcanu naravno, ne primam u naturi) posalji na PP ili ovdje, meni je svejedno.
moze i ode... zanima i mene rjesenje
{
//
return demo;
}
demoi d3(42);
demo d4(addone(d3);
Ovdje u stvari pozivom funkcije imamo dva pridruživanja varijable tipa demo, a pridruživanjem se vrši alokacija objekta - stoga se pozivaju konstruktori kopije.
1. pozivom funkcije varijabli d pridružujemo varijablu d3. d = d3 - alociramo objekt d - a vrijednost člana x objekta d dobija vrijednost 42
2. funkcija addone vraća objekt tipa demo i ponovno imamo pridruživanje d4 = d - alocira se objekt d4 - a član x objekta d4 dobija vrijednost 43 - pošto član x objekta d koji funkcija vraća ima sada vrijednost 43.
Sve je po pravilu - samo vidimo u primjeru ono što se dešava ispod haube pošto smo napravili konzolni ispis u konstruktoru - vidimo i alokaciju objekta d u funkciji demo addone(demo d), a ta alokacija se vrši pridruživanjem koje se vrši pozivom funkcije.
Da li mi neko moze napisat program za c++ koji izracunava povrsinu i obim pravougaonika
Sve se moze dogovoriti. Ponudu (novcanu naravno, ne primam u naturi) posalji na PP ili ovdje, meni je svejedno.
A profe ih ovdje čitaju - pa se zlobe - jer je uvijek standardna priča - kako im profe ništa ne pokazuju
Da li mi neko moze napisat program za c++ koji izracunava povrsinu i obim pravougaonika
Ovdje je bitna samo primjena znanja iz aritmetičkih operatora, deklaraciji varijabli i upisa i ispisa.
Evo ti kod, ali ako nemaš namjeru za ovo potruditi se.....
int main()
{
float a,b;
float p,o;
cout<<"Program za racunanje obima i površine pravougaonika."<<endl<<"Unesite veličine stranica"<<endl;
cin>>a>>b;
p=a*b;
o=2*(a+b);
cout<<"Površina pravougaonika je "<<p<<endl<<"Obim pravougaonika je "<<o<<endl;
return 0;
}
Sama forma (CDialog u MFC-u) bi trebala imati evente tipa OnKeyDown i OnKeyUp. Unutar njih se detektira koja tipka je pritisnuta i što bi tada trebalo raditi.
http://social.msdn.microsoft.com/forums/en-us/csharpgeneral/thread/F8F5F159-6FB3-4038-8337-369F4C4948CF
http://msdn.microsoft.com/en-us/library/983st27a%28v=vs.80%29.aspx
Evo ovak, malo sam promjenio kod. Stavio sam u class wizzardu onkeydown message za moj dijalog prozor i on mi je sam otvorio funkciju u koju sam napisao kod i to sad izgleda ovako:
void CzavrsniDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
int v=1;
CString ff;
ff.Format ("%d",v);
const TCHAR* cstr = (LPCTSTR)ff;
ShowImage(cstr,m_Input[v]);
switch (nChar) {
case VK_HOME:
cvDestroyWindow(cstr);
v=global;
ff.Format ("%d",v);
cstr = (LPCTSTR)ff;
ShowImage(cstr,m_Input[v]);
break;
case VK_END:
cvDestroyWindow(cstr);
v=1;
ff.Format ("%d",v);
cstr = (LPCTSTR)ff;
ShowImage(cstr,m_Input[v]);
break;
case VK_PRIOR:
cvDestroyWindow(cstr);
if (v==global)
{
v=1;
}
if (v < global)
{
v++;
}
ff.Format ("%d",v);
cstr = (LPCTSTR)ff;
ShowImage(cstr,m_Input[v]);
break;
case VK_NEXT:
cvDestroyWindow(cstr);
if (v==1)
{
v=global;
}
if (v > 1)
{
v--;
}
ff.Format ("%d",v);
cstr = (LPCTSTR)ff;
ShowImage(cstr,m_Input[v]);
break;
default:
break;
}
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
Ali on sada uopce neradi nepokazuje mi oupce prozor za prikaz slike. Neznam u cemu bi mogao biti problem. Jel može opet neki hint (sorry ak sam naporan, al stvarno mi treba pomoč, da mogu sam nebi nikog tu gnjavio)
Nevezano za tvoj problem, bilo bi jako dobro da koristis stil Kod za prikaz koda, kad pises post tu gore kod stilovi imas Kod. Lakse je nama citati kod, a samim time i pomoci.
To ti moraš provjeriti pod kojim uvjetima i kada pozivaš prozor, sa kojeg prozora hvataš tipke i kako ih procesiraš. Ja sam ti napisao koji event bi trebao koristiti no nažalost ti dalje moraš sam.
može li mi neko na ovakvom programu objasniti rad s poljima u c++
Upiši polje od 10 brojeva, brojeve na parnim pozicijama zbroji u jednu sumu, a na neparnim u drugu sumu...
može li mi neko na ovakvom programu objasniti rad s poljima u c++
Upiši polje od 10 brojeva, brojeve na parnim pozicijama zbroji u jednu sumu, a na neparnim u drugu sumu...
Stvoris polje npr. int P[10];
Petljom uneseš 10 brojeva;
Sada napravis slicno ovome:
for(i=0;i<10;i+=2)//Ovo su brojevi na neparnim pozicijama jer P[0] sadrzi broj koji je na prvoj poziciji odnosno neparnoj poziciji u zadanom polju
{
zbr_neparnih+=P[i]);// zbr_neparnih mira na pocetku biti postavljen na 0
}
Ovako slicno napravis za parne pozicije
može mi neko preporučit neku knjigu ili udžbenik o c++-u. Počeo sam programirati sa knjigom "c++ za apsolutne početnike", no u toj se knjizi opisuju i grafički programi koje mene (trenutno) ne zanimaju. Najviše sam zainteresiran za matematičke/logičke zadatke koji se pojavljuju na školskim/županijskim/državnim natjecanjima iz informatike. Vidio sam da se često preporučuje Demistificirani c++, no nisam siguran dal se u njemu opisuju samo matematički/logički programi ili i grafički.
eh i dalje ne ide... ali...pomoću int P[10] se znači stvara polje.. ovo u zagradi onda vjerojatno označuje kolko vrijednosti stane u polje.. to shvaćam
iskreno.. ostalo nemam pojma :S
Da li mi neko moze napisat osnovne naredbe funkcije c++ - a?
Tek pocinjem sa programiranjem.
Radio sam u qbasic i visual basic al to nije isto kao c++ pa se teze snalazim.
Da li mi neko moze napisat osnovne naredbe funkcije c++ - a?
Tek pocinjem sa programiranjem.
Radio sam u qbasic i visual basic al to nije isto kao c++ pa se teze snalazim.
Evo.
eh i dalje ne ide... ali...pomoću int P[10] se znači stvara polje.. ovo u zagradi onda vjerojatno označuje kolko vrijednosti stane u polje.. to shvaćam
Da, kada deklariras varijablu u uglate zagrade stavljas koliko clanova ce to polje imati.
polje od 10 znakova:
char p[10];
polje od 10 integera (cijelih brojeva):
int p[10];
polje od 10 floating point brojeva (realnih brojeva):
float p[10];
I tako za sve ostale tipove. Pravilo je: tip imevarijable[broj clanova];
Tako da mozes raditi i polja struktura, polja polja (polje ciji su clanovi zapravo nova polja)...
Da bi pristupao odredenim clanovima polja koristis indeks tog clana:
npr. ako imas polje cijelih brojeva:
int p[20];
i zelis 15-om clanu dati neku vrijednost to cinis ovako:
p[14]=10;
Zasto 14 a ne 15? Zato sto prvi clan u polju nema indeks 1 nego 0, kako se pocinje brojati od nule tako su i indeksi ostalih clanova manji za jedan.
Da li mi neko moze napisat osnovne naredbe funkcije c++ - a?
Tek pocinjem sa programiranjem.
Radio sam u qbasic i visual basic al to nije isto kao c++ pa se teze snalazim.
Evo.
da je na nasem prevod ????