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

Kada se dodaje explicit...?

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

[ Pregleda: 2750 | Odgovora: 9 ] > FB > Twit

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 - pre 187 meseci
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>
 
Odgovor na temu

karas

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



+1 Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 08:39 - pre 187 meseci
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."
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

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

Sajt: www.articles411.com


+8 Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 10:43 - pre 187 meseci
@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.
 
Odgovor na temu

karas

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



+1 Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 11:38 - pre 187 meseci
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."
 
Odgovor na temu

magics
Beograd

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



Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 13:21 - pre 187 meseci
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>
 
Odgovor na temu

karas

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



+1 Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 15:12 - pre 187 meseci
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."
 
Odgovor na temu

magics
Beograd

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



Profil

icon Re: Kada se dodaje explicit...?01.09.2006. u 16:57 - pre 187 meseci
Da kapiram sad mi je jasno. Hvala!
<the end of post>
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

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



+1 Profil

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

magics
Beograd

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



Profil

icon Re: Kada se dodaje explicit...?02.09.2006. u 15:17 - pre 187 meseci
bas tako pojavljivalo se ovo pitanje vec nekoliko puta.
<the end of post>
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

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



+1 Profil

icon Re: Kada se dodaje explicit...?08.09.2006. u 01:05 - pre 187 meseci
I kako si prosao?
De si Deda...
 
Odgovor na temu

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

[ Pregleda: 2750 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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