[C++]Dziedziczenie i składowe statyczne

0

Witam
W jaki sposób są dziedziczone składowe statyczne? Jeżeli są dziedziczone to czy odnoszą się do klasy bazowej czy podstawowej?

0

Wydaje mi sie, ze skladowe statyczne nie sa dziedziczone. Po prostu istnieje jeden egzemplarz tej zmiennej dla klasy bazowej i klasy pochodnej.

Przy czym inicjalizacja musi sie odbywac dla klasy bazowej, czyli np.
int bazowa::zmienna_statyczna = 3;

w kodzie mozesz sie odwolywac np.
bazowa::zmienna_statyczna
pochodna::zmienna_statyczna

oczywiscie przypisania nie obowiazuja te same zasady co inicjalizacji.

0

Trochę zmartwiłą mnie twoja odpowiedź, bo ja właśnie potrzebuje odziedziczyć z klasy abstrakcyjnej składową statyczna, mniej więcej tak by to wyglądało:

class IKlasa
{
     public:
     static const int m_iPriority;
};

class TTyp1 : public IKlasa
{
};
const int TTyp1::m_iPriority = 1;

class TTyp2 : public IKlasa
{
};
const int TTyp2::m_iPriority = 2;

Czy ktoś wie jak ten problem rozwiązać?

0

w klasach pochodnych musisz ponownie zadeklarwac to pole - wtedy nowa deklaracja przesloni poprzednia (zwroc uwage, ze pole z klasy bazowej jest jedno dla wszystkich klas ale ma zasieg klasy bazowej. Jezeli teraz w zasiegu klasy pochodnej ponownie zdefiniujesz to pole to poprzednia definicja bedzie przeslonieta). Oczywiscie do deklaracji z klasy bazowej mozesz sie nadal odwolywac - poprzez operator zasiegu. (dwie kropki).

0
abcd napisał(a)
class IKlasa
{
     public:
     static const int m_iPriority;
};

class TTyp1 : public IKlasa
{
};
const int TTyp1::m_iPriority = 1;

class TTyp2 : public IKlasa
{
};
const int TTyp2::m_iPriority = 2;

Składnik statyczny jest jeden dla wszystkich trzech klas, w tak samo przez nie wydziany i inicjalizowany raz 'IKlasa::m_iPriority = xxx;'
Jeśli interfejs IKlasa ma kokoRZystaćystać z tej zmiennej musi to byś składnik wirtualny.Skożystaj z wirtualnej funkcji, np. w klasie bazowej deklaracje "pure virtual"

virtual int m_iPriority() = 0;

A w klasach pochodnych np. virtual int m_iPriority() { return 1; };

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