• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Poprawne inicjalizowanie konstruktora

0 głosów
54 wizyt
pytanie zadane 29 sierpnia 2016 w C i C++ przez użytkownika Bondrusiek Dyskutant (9,510 punkty)

Witam,

mam pytanie odnośnie inicjalizacji konstruktora. Czemu taka inicjalizacja jest nieefektywna:

Complex(double realPart , double imPart)
{
m_R = realPart;
m_I = imPart;
}

Każde z pól jest inicjalizowane wartością domyślną, a następnie otrzymujemy właściwą wartość. Nie występuje żaden błąd, ale taka inicjalizacja to marnowanie czasu procesora. Tutaj pojawia się moja wątpliwość czemu konstruktor pobiera wartości domyślne a następnie otrzymuje wartości właściwe. Idąc tym tokiem rozumowania przy pisaniu jak najefektywniejszego kodu dobrze przypisywać jakieś wartości do zmiennych niż zostawiać je puste np.

int i = 0;
//cos tam
i = 100;
//niż 
int i;
//cos tam
i = 100;

a jeszcze lepiej od razu pisać właściwe wartości.

1 odpowiedź

+1 głos
odpowiedź 29 sierpnia 2016 przez użytkownika L33TT12 Bywalec (2,660 punkty)
Dlatego stosuje się listę inicjalizacyjną.
komentarz 29 sierpnia 2016 przez użytkownika Bondrusiek Dyskutant (9,510 punkty)
Nom wiem np. postaci

Konstrukcor(int cos) : this->cos = cos {}.

Ale chciałbym się dowiedzieć dlaczego te dwa sposobu są nierównoważne tzn czemu konstruktor przyjmuje dla siebie wartości domyślne a nie czeka na te, które mu podamy.
komentarz 29 sierpnia 2016 przez użytkownika L33TT12 Bywalec (2,660 punkty)
Dlatego, bo kod w konstruktorze wykona się dopiero po stworzeniu obiektu, a w tym czasie zmienne muszą posiadać jakieś wartości, więc konstruktor sam je wybiera a stosując listę inicjalizacyjną konstrukor przypisuje wartości w momencie tworzenia obiektu.

Podobne pytania

0 głosów
1 odpowiedź 73 wizyt
pytanie zadane 13 sierpnia 2016 w C i C++ przez użytkownika SebekMakaron Użytkownik (960 punkty)
0 głosów
2 odpowiedzi 125 wizyt
pytanie zadane 3 lipca 2016 w C i C++ przez użytkownika endlesik Nowicjusz (150 punkty)
+1 głos
1 odpowiedź 59 wizyt
...