Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kada se dodaje explicit...?

[es] :: C++ programiranje :: C++ za početnike :: Kada se dodaje explicit...?

[ Pregleda: 759 | Odgovora: 9 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

magics
Beograd

Član broj: 109054
Poruke: 6
*.beobug.com.



Profil

icon Kada se dodaje explicit...?01.09.2006. u 00:48

Da li neko zna kada je neophodno ispred imena konstruktora dodati prefix explicit? Znam ja da je to kad konstruktor ima ili moze da ima samo jedan argument pa kao da se ne bi mesao sa konstruktorom konverzije ali stos je sto u nekim primerima vidim da i sa jednim argumentom konstruktor nema prefix explicit.
<the end of post>
01.09.2006. u 00:48 

karas

Član broj: 5574
Poruke: 393
*.routotelecom.com.



Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 08:39
Kontruktor sa jednim parametrom implicitno definiše konverziju iz tipa parametra u tip klase. Npr. klasa

Code:

class C
{
  C(string&);
};


definiše konverziju iz klase string u klasu C. To znači da npr. funkcija

Code:

void f(C&);


koja prihvata argument tipa C ako se pozove sa npr.

Code:

string s = "Hello, World!";
f(s);


uradiće (implicitno) konverziju objekta s tipa string u objekat tipa C. Ako tako nešto treba onemogućiti, onda se kontruktor klase C definiše sa explicit. U tom slučaju, prethodno nije moguće, već se mora eksplicitno uraditi konverzija:

Code:

string s = "Hello, World!";
f(C(s));



Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
01.09.2006. u 08:39 

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 409
*.smin.sezampro.yu.

Sajt: www.todicsoft.com


Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 10:43
@Karas
Vrlo lepo receno.

Jos da dodam sledece. Ako imas konstruktor kopiranja a nemas operator dodele kompajler "ne pravi" sintetizovani konstruktor( kod njega se dodela vrednosti vrsi rekurzivno) nego koristi konstruktor kopiranja, medjutim ako hoces da onemogucis dodelu vrednosti stavi rec explicit kod definicije konstruktora.
Jos jedan primer. Uzmi klasu vector, ona ima konstruktor koji rezervise odredjenu kolicinu memorije ali je ne incializuje. Taj konstruktor MORA biti izricit(explicit) jer bi u suprotnom ti mogao da ga inicializujes ovako:
vector<int> broj = 100;
Izgleda kao da si mu dodao vrednost a u stvari si rezervisao memoriski prostor....
Cini mi se da sam negde procitao da explicit treba da bude onaj konstruktor koji ne menja vrednosti objekta, kao u primeru iznad.
01.09.2006. u 10:43 

karas

Član broj: 5574
Poruke: 393
*.routotelecom.com.



Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 11:38
Prepisano iz C++ Primer.;)
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
01.09.2006. u 11:38 

magics
Beograd

Član broj: 109054
Poruke: 6
*.beobug.com.



Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 13:21
Hvala na brzom odgovoru od velike je pomoci. Ajde jos jedno pitanje i vise necu smarati. imam jedno pitanje sa ispita koje ne znam kako da resim :

Objasniti zašto navedena konstrukcija nije ispravna:
class A { int i; public: A(int ii){i=ii;} };
class B: public A { int j; public: B(int jj){j=jj;} };

<the end of post>
01.09.2006. u 13:21 

karas

Član broj: 5574
Poruke: 393
*.routotelecom.com.



Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 15:12
Code:

class A 

    int i; 
public: 
    A(int ii)
    {
        i=ii;
    }
};

class B: public A 
{
    int j; 
public:
    B(int jj) : A(jj)
    {
        j=jj;
    } 
};

int main()
{
}


je ispravno. Razlika je u B konstruktoru: poziva odgovarajucci A konstruktor. Ako se ne navede, kompajler poziva konstruktor A() koji nije definisan.

P.S.
Koristi code tagove.

[Ovu poruku je menjao karas dana 01.09.2006. u 16:41 GMT+1]
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
01.09.2006. u 15:12 

magics
Beograd

Član broj: 109054
Poruke: 6
*.beobug.com.



Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 16:57
Da kapiram sad mi je jasno. Hvala!
<the end of post>
01.09.2006. u 16:57 

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 308
*.dynamic.sbb.co.yu.



Profil

icon Re: Kada se dodaje explicit...?02.09.2006. u 02:56
magics, jel to neki od prethodnih ispita sa ETF-a i cuvena Tartaljina mini pitanja posle zadatka???
De si Deda...
02.09.2006. u 02:56 

magics
Beograd

Član broj: 109054
Poruke: 6
*.beobug.com.



Profil

icon Re: Kada se dodaje explicit...?02.09.2006. u 15:17
bas tako pojavljivalo se ovo pitanje vec nekoliko puta.
<the end of post>
02.09.2006. u 15:17 

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 308
*.dynamic.sbb.co.yu.



Profil

icon Re: Kada se dodaje explicit...?08.09.2006. u 01:05
I kako si prosao?
De si Deda...
08.09.2006. u 01:05 

[es] :: C++ programiranje :: C++ za početnike :: Kada se dodaje explicit...?

[ Pregleda: 759 | Odgovora: 9 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.