Lista inicjalizująca dla klasy bazowej w klasie pochodnej

0

Cześć,
mam takie pytanie:
mam klasę bazową i dwie klasy pochodnej po niej. Klasa bazowa jest abstrakcyjna. W klasie bazowej nie wszystkie zmienne są ustawiane w konstruktorze, gdyż to jest uzależnione od klasy pochodnej. Mam pytanie czy w klasie pochodnej mogę ustawić pole klasy bazowej w liście inicjalizującej a nie w ciele konstruktora? Przykładowo:

class Basic
{
public:
Basic(int x) : c(x){}
int a,b,c ; //z a i b nic nie robimy
}

class Deriv1
{
public:
Deriv1(int y) : Basic::a(y){} //nie działa!
}

class Deriv2
{
public:
Deriv2(int y) : b(y){} //również nie dziła :(
}

Czy da się to jakoś obejść? Podobno zmienne powinno się ustawiać w liście inicjalizującej...

Z góry dziękuję za pomoc.

1

Zapomniałeś dodać od kogo te klasy dziedziczą

class Deriv2 :public Basic
{
Deriv2(int y) : Basic(y){} 
}
1

Na liście inicjalizacyjnej możesz zainicjalizować tylko własne składowe oraz bezpośrednie klasy bazowe oraz wirtualne bazowe. Klasy możemy zainicjalizować wyłącznie poprzez któryś z ich konstruktorów.
Możesz rozwiązać to tak:

class Basic
  {
   public:
   Basic(int c,int b=0,int a=0):c(c),b(b),a(a) {}
   int a,b,c;
  };
 
class Deriv1: public Basic
  {
   public:
   Deriv1(int y):Basic(0,0,y) {}
  };
 
class Deriv2: public Basic
  {
   public:
   Deriv2(int y):Basic(0,y,0) {}
  };
0

Ok, dziękuję wam bardzo za pomoc!
Faktycznie zapomniałem dodać od kogo te klasy dziedziczą :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1