Friend class i dziedziczenie

0

Witam

Mój problem najlepiej przedstawić na prostym przykładzie, więc:

class Bazowa {
private:
public:
};

class Magazyn {
private:
	int wartosc;
public:
	friend class Bazowa;
};

class NieBazowa : public Bazowa {
public:
	NieBazowa() {
		Magazyn instancja;
		instancja.wartosc = 0;
	}
};

Problem polega na tym, że klasa NieBazowa nie dziedziczy przyjaźni z Magazynem co owocuje błędem:
error C2248: 'Magazyn::wartosc' : cannot access private member declared in class 'Magazyn'
I moje pytanie: Da się zrobić tak, żeby przyjaźń rodzica między inną klasą była przenoszona także na dziecko?

0

Standardowo friends'ow nie mozna dziedziczyc, ale w klasie pochodnej mozesz dac friends'a takze do tej klasy co chcesz i bedzie po problemie.

0

Znaczy chodzi mi o to, ze jak chcesz miec dostep do skladowych klasy magazyn w klasie nie bazowa to daj jeszcze jednego friends'a w klasie magazyn, ale do klasy NieBazowa.

0

A jest jakieś niestandardowe rozwiązanie, tak żeby friendsy były dziedziczone?
Bo proponowane przez Ciebie rozwiązanie nie pasuje do mojej koncepcji projektu :) Bo założenie jest takie, że Magazyn nie "wie" jakie dokładnie obiekty będą miały dostęp do jego sekcji prywatnej, "wie" jedynie że te obiekty będą dziedziczyły z klasy bazowej.

0

a moze dasz "normalne" dziedziczenie jak człowiek a nie relecje friend...

0

Relacje friend do tego mojego projektu lepiej by pasowały.. ale widzę, że jednak trzeba będzie te moje rozwiązanie przebudować. Trudno :-/

0

Bo założenie jest takie, że Magazyn nie "wie" jakie dokładnie obiekty będą miały dostęp do jego sekcji prywatnej

Bałbym się trzymać swoje obiekty w Twoim magazynie.
Zmień to założenie. Jest do bani. W ogóle jeśli coś musi mieć dostęp do części prywatnej, to.... ona przestaje być prywatna. Oznacz jako public i po sprawie. Albo jak Cię bardzo boli, zmień język, na taki gdzie kontrola dostępu jest lepiej przemyślana.

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