• 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
56 wizyt
pytanie zadane 29 sierpnia 2016 w C i C++ przez Bondrusiek Stary wyjadacz (11,150 p.)

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 L33TT12 Gaduła (3,030 p.)
Dlatego stosuje się listę inicjalizacyjną.
komentarz 29 sierpnia 2016 przez Bondrusiek Stary wyjadacz (11,150 p.)
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 L33TT12 Gaduła (3,030 p.)
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
0 odpowiedzi 24 wizyt
0 głosów
1 odpowiedź 77 wizyt
pytanie zadane 18 stycznia w C i C++ przez dociekliwy Nowicjusz (150 p.)
0 głosów
1 odpowiedź 84 wizyt
...