Dziedziczenie wielokrotne i konstruktory.

Dziedziczenie wielokrotne i konstruktory.
C2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Piszę do Was z prośbą o wytłumaczenie mi jak mogę otrzymać wartość zmiennej(pola) zainicjowana przez konstruktor w klasie podstawowej, aby otrzymać ją w klasie pochodnej. Chodzi mi głownie, aby mogł korzystać z danej wartości pola w innych klasach pochodnych. Aha i zalezy mi, aby ta wartość mozna było modyfikować poprzez inne metody klas pochodnych. Pole, ktorego wartość chce modyfikować powinno być z dostepem protected.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0

Jak ma wyglądać hierarchia klas? Jakie są klasy, co po czym dziedziczy?

fasadin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4883
0

jezeli potrzebujesz pole ktore ma dostep do kazdego "dziecka" i jest jedyne w swoim rodzaju to pasuje tutaj static dla klasy bazowej... ale troche dziwne ze potrzebujesz cos takiego

C2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0
Kopiuj
class Baza
{
protected:
int x;
int y;
public:
Baza(int x,int y);
};
class Pochodna1: public Baza
{
...
};
class Pochodna 2: public Pochodna 1
{
...
};
class Pochodna 3 : public Pochodna 2
{
...
};

Chce powiedzmy wartosc x modyfikowac lub odczytywac w pochodnych klasach. Ano i musze sie obejsc bez zmiennej statycznej.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
2

od tego są gettery i setery.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
3

Po pierwsze nie ma tam żadnego dziedziczenia wielokrotnego. Ale domyślam się, że użyłeś tego określenia w potocznym znaczeniu.

Po drugie nie rozumiem problemu. Pole protected może być beztrosko modyfikowane przez metody klas pochodnych.

Kopiuj
#include <iostream>
using namespace std;

class Baza
{
protected:
    int x;
    int y;
public:
    Baza(int x, int y) : x(x), y(y) {}
};

struct Pochodna1 : public Baza 
{
	Pochodna1(int x, int y) : Baza(x, y) {}	
};

struct Pochodna2 : public Pochodna1 
{
	Pochodna2(int x, int y) : Pochodna1(x, y) {}
};

struct Pochodna3 : public Pochodna2 
{
	Pochodna3(int x, int y) : Pochodna2(x, y) {}
	void ojtam() { x = y = -12; }
	void print() { cout << x << " " << y << endl; }
};

int main() 
{
	Pochodna3 foo(11, -1);
	foo.ojtam();
	foo.print();
	
	return 0;
}
C2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Temat do zamknięcia.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.