Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje
Uputstvo Članstvo Kalendar Današnje poruke Pretraži

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 15.4.2009, 11:59   #1
kish
Član
 
Član od: 29.7.2006.
Lokacija: In My Tree
Poruke: 248
Zahvalnice: 32
Zahvaljeno 44 puta na 27 poruka
Slanje poruke preko MSN-a korisniku kish
Određen forumom Problem sa konstruktorima

Radi se o klasi X koja ima jedno polje a tipa float, i tri konstruktora: X(), X(float fa), X(int fa), stime da je 3. kostruktor realizovan preko 2.:
Kod:
#include <iostream>
using namespace std;

class X {
public:
    X();
    X(float fa);
    X(int fa);
    void print();
private:
    float a;
};

X::X() {
    cout<<"Calling X()."<<endl;
    this->a = 0;
    cout<<"Closing X(). a = "<<a<<endl;
}

X::X(float fa) {
    cout<<"Calling X(float)."<<endl;
    this->a = fa;
    cout<<"Closing X(float). a = "<<a<<endl;
}

X::X(int fa) {
    cout<<"Calling X(int)."<<endl;
    X((float)fa);
    cout<<"Closing X(int). a = "<<a<<endl;
}

void X::print() {
    cout<< a <<endl;
}

int main()
{
    X test(2);

    test.print();
    return 0;
}
Poruke "Calling" i "Closing" su tu cisto radi kontrole stanja pre i posle poziva funkcija. Kao output dobijam:
Kod:
Calling X(int).
Calling X(float).
Closing X(float). a = 2
Closing X(int). a = NaN
NaN
Problem je sto na kraju polje a nema vrednost 2, kao ocekivano, vec ostaje nepromenjeno, odnosno gubi se nakon vracanja iz X(float) u X(int). Pitanje je da li je moguce "oslanjati" konstruktore jednog na drugi na ovakav nacin ili treba u svakom posebno inicijalizovati polja (pogotovo u slucaju kada ima vise polja i vise konstruktora)?
kish je offline   Odgovor sa citatom ove poruke
Stara 15.4.2009, 14:56   #2
rile
Član
 
Član od: 9.7.2007.
Poruke: 119
Zahvalnice: 2
Zahvaljeno 31 puta na 29 poruka
Određen forumom Re: Problem sa konstruktorima

To je dobra tehnika u javi, ali ne radi u C++.

Ukoliko imaš neku zajedničku inicijalizaciju, stavi je u nevirtuelni metod koji oba konstruktora pozivaju.

Obrati pažnju da je generalno pravilo da se iz konstruktora ne pozivaju virtuelni metodi istog objekta jer nije garantovano kada će tabela virtuelnih metoda biti inicijalizovana.
rile je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku rile na korisnoj poruci:
kish (15.4.2009)
Odgovor

Bookmarks sajtovi


Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Nokia e71 i problem sa USB konekcijom PsyDuck Aparati i oprema 5 1.12.2010 15:17
Problem sa obaranjem sistema Tintoreti Kvarovi 2 5.1.2009 0:48
Problem sa podešavanjima TV i monitora bacacar Grafika 2 3.1.2009 13:06
Problem sa 3DSM 8 - problem sa konjem M.A.G.E 3D radovi 7 29.12.2008 11:27
Problem sa reprodukcijom DVD materijala Dimo Kvarovi 7 27.4.2008 16:05


Sva vremena su po Griniču +2 h. Sada je 15:53.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com