[ SuperC @ 14.12.2006. 16:44 ] @
u zadatku (sa testa) stoji:

Code:
#include <iostream>
using namespace std;
class A {
public:
A () {cout << "noch";}
A (int x);
A (double y);
};
A::A (int i) { cout  << i;}
A::A (double y) {
cout << y;}

int main () {
A a, b (200);
A c (5.12);
return 0;
}


Eh, sada jasno je meni da nakon deklarariranja i zatvaranja (ovdje int x ne igra neku ulogu koliko vidim), da se ide na main () dio, odakle se poziva prvo gornji A koji nema nista te se kao prvi dio rjesenja izbacuje noch, a sta poziva b(200)? Mozda A (double y)? jer onda ce biti da sje drugi dio rjesenja 200, ako je tako, ostaje A c(5.12) sta s njim?

Ako moze konkretno pojasnjenje, na ovom primjeru. Hvala

--
19: 23h Update: shvatih kako funkcionise

[Ovu poruku je menjao SuperC dana 14.12.2006. u 19:33 GMT+1]
[ SuperC @ 14.12.2006. 19:47 ] @
novo pitanje:

ako imam

Code:
class Zug {
int waggons, zugnr;
public:
Zug (int nr, int wag=5) {
zugnr = nr;
waggons=wag;
}
int vergleich (Zug g) {
if (waggons>=g.waggons) {
return zugnr;
}
return g.zugnr;
}
};
int main () {
Zug e(10), z(20,10);
int i = e.vergleich (z);
cout << "Zug" << i
<< ist laenger!";
}


--------------------------------
dakle ovdje imam da je prvi dio rjesenja Zug a posljednji je ist laenger, zatim se trazi vrijednost od i (koja daje rjesenje izmedju), koja je integer tipa, no sta dalje (opet treba mi pojasnjenje, ne prijedlozi tipa provuci kroz kompajler i vidi u knjigama)?
[ del-boy @ 14.12.2006. 20:48 ] @
Koliko god se trudio ne mogu da skontam šta si ti hteo da pitaš. Ajde pitaj nepto konkretnije i jasnije.

Inače, Zug e(10) verovatno neće raditi jer nema konstruktor koji prima samo jedan integer.
[ SuperC @ 14.12.2006. 21:05 ] @
dakle, kao i prvo pitanje, koje sam u medjuvremenu shvatio sam, tako i drugo je pitanje sa testa, sto znaci ne kompajliraj nego samo prodji kroz program i reci mi sta si dobio, ja imam rjesenje ali me zanima kako se doslo do istoga. nadam se da razumijes?


znaci ako je int i = e. vergleich (z) sta onda?
[ SuPeR_MaSteR @ 15.12.2006. 00:56 ] @
Citat:
del-boy:
..
Inače, Zug e(10) verovatno neće raditi jer nema konstruktor koji prima samo jedan integer.


Hoce raditi, konstruktor prima 2 argumenta s' tim sto je drugom zadata vrednost 5 u slucaju da nije naveden u listi argumenata.

Code:

int vergleich (Zug g) {
if (waggons>=g.waggons) {
return zugnr;
}
return g.zugnr;
}


Poredi se unutrasnja promenljiva clanica sa promenljivom clanicom objekta g tipa/klase Zug. U slucaju logicke istine (tj. da je leva strana veca ili jednaka desnoj), funkciji se vraca vrednost unutrasnje promenljive zugnr, odnosno vrednost promenljive zugnr ali clanice objekta g.

U konkretnom primeru sto si naveo:
Code:

Zug e(10), z(20,10);

Kreiraju se 2 objekta klase Zug (e,z) sa sledecim vrednostima varijabli:
e.zugnr = 10, e.waggons = 5; i
z.zugnr = 20, z.waggons = 10;

Code:

int i = e. vergleich (z) 

Poziva se funkcija clanica klase e i kao argument prosledjuje joj se objekat klase Zug, zatim se porede e.waggons i g.waggons (kopija), i vraca se vrednost g.zugnr (to jest kopija vrednosti z.zugnr) -> ta vrednost se dodeljuje promenljivoj i.
[ del-boy @ 15.12.2006. 01:55 ] @
Citat:

Hoce raditi, konstruktor prima 2 argumenta s' tim sto je drugom zadata vrednost 5 u slucaju da nije naveden u listi argumenata.


Moja greška, nisam video da postoji podrazumevana vrednost.
[ SuperC @ 15.12.2006. 06:54 ] @
Ok, razumijem, znaci u ovom slucaju ce rjesenje biti 20 za varijablu, dok ce u slicnom primjeru:

Code:
class Zug {
int waggons, zugnr;
public:
Zug (int nr, int wag=5) {
zugnr = nr;
waggons=wag;
}
int vergleich (Zug g) {
if (waggons>=g.waggons) {
return zugnr;
}
return g.zugnr;
}
};
int main () {
Zug e(5, 12), z(7);
int i = e.vergleich (z);
cout << "Zug" << i
<< ist laenger!";
}


vrijednost 5 biti dodijeljena z pa ce se porediti 5, 12 sa 7, 5 i posto je wagon 12 veci od wagona 5 vratiti ce se vrijednost od zug od e sto je vrijednost 5 te je to i promjenjiva i ?
[ SuPeR_MaSteR @ 15.12.2006. 10:57 ] @
yea, bas tako.