|
Dziedziczenie konstruktor?w w c++
Union Chocolate. |
Kto? mo?e mi wyt?umaczy??
Dlaczego to nie dzia?a:
#include <stdio.h> #include <stdlib.h>
class A { public: int x; A() { x=0; } A(int i) { x=i; } };
class B : public A { public: B(int i) { A::A(i); } };
int main() { B b(1); printf("b.x: %d\n",b.x); //wypisuje 0 zamiast 1 return 0; }
Rozumiem, ?e konstruktor B(int i) wywo?uje najpierw A() [bo z A dziedziczy], potem A(int i) [poprzez A::A(i)].
Tylko dlaczego x nadal jest r?wne 0? I czy mo?na zrobi?, aby od razu by?o wywo?ywane A(1) bez A()???
slyszales o liscie inicjalizacyjnej? zamiast wywolywac konstruktor klasy rodzica wewnatrz konstruktora klasy dziecka trzeba umiescic konstruktor klasy rodzica na liscie inicjalizacyjnej. sprowadza sie to do takiej modyfikacji:
class B : public A { public: B(int i) : A(i) { } };
i kolejnosc uruchomienia konstruktorow jest intuicyjna najpierw rodzic pozniej dziecko. to jednoczesnie sprawia, ze wywolywany jest tylko wskazany konstruktor klasy rodzica czyli A(i), bez A()
W?a?nie o to mi chodzi?o, wielkie dzi?ki.
zanotowane.pldoc.pisz.plpdf.pisz.plfisis2.htw.pl
|
|