[C++]Dziedziczenie i składowe statyczne

Odpowiedz Nowy wątek
2006-08-31 09:07
abcd
0

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

Pozostało 580 znaków

2006-08-31 09:59
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.


Pozostało 580 znaków

2006-08-31 10:34
abcd
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ć?

Pozostało 580 znaków

2006-08-31 11:14
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).


Pozostało 580 znaków

2006-08-31 19:53
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 kożystać z tej zmiennej musi to byś składnik wirtualny.Skożystaj z wirtualnej funkcji, np. w klasie bazowej deklaracje "pure virtual"
```cpp
virtual int m_iPriority() = 0;

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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