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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • fisis2.htw.pl


  •  

     

     

     

     

     

     

     

     

     

     

     

       
     
      Dziedziczenie konstruktor?w w c++
    Union Chocolate.