Dziedziczenie protected

0

Witam,

mam taki problem, dwie klasy:

class klasa1
{
	protected:
		int x;
	
	public:
		virtual ~klasa1()
		{
		}
};

class klasa2 : protected klasa1
{
	public:
		klasa2(void)
		{

		}
		~klasa2(void)
		{
		}
};

Następnie tworzę obiekt klasy: klasa2 i przypisuję go do wskaźnika klasy: klasa1 (niejawna konwersja):

	klasa1 *obiekt = new klasa2();

Oczywiście kompilator protestuje.
A ja chcę, aby właściwość x z klasy: klasa1 była odziedziczona jako protected.
Jeśli mam w klasie bazowej więcej takich właściwości, to za każdym razem w klasie pochodnej muszę oznajmiać, że mają mieć one dostęp protected za pomocą operatora zakresu, zmieniając tym samym dziedziczenie na public?:

class klasa2 : public klasa1
{
	protected:
		klasa1::x;
	public:
		klasa2(void)
		{

		}
		~klasa2(void)
		{
		}
};

Nie da się tego inaczej zrobić?
Pozdr. Thx

EDIT:
Aaaa... Przecież skoro w klasie podstawowej x jest protected, to w pochodnej też będzie protected mimo dziedziczenia publicznego...
Do zamknięcia ;) (no chyba, że coś jeszcze przeoczyłem?)

EDIT2:
Dziękować [soczek]

0

nie, nie przeoczyles.
typ dziedziczenia w stosunku do dziedziczonych pol i metod zachowuje sie jak "maska" obcinajaca uprawnienia ktore sa zbyt wysokie.

jeżeli dziedziczenie jest "public", to wszystkie pola/metody/.. z klasy bazowej przechodza bez zmian. kazda rzecz ktora jest w bazie oznaczona jako:

  • public - bedzie public, bez zmian
  • protected - bedzie protected, bez zmian
  • private - bedzie !private, bez zmian -- private BAZY, nie dostepna dla TEJ klasy ktora dziedziczy

jeżeli dziedziczenie jest "protected", to wszystkie pola/metody/.. z klasy bazowej przechodza z conajwyzej widocznoscia protected. kazda rzecz ktora jest w bazie oznaczona jako:

  • public - bedzie protected
  • protected - bedzie protected, bez zmian
  • private - bedzie !private, bez zmian -- private BAZY(..)

jeżeli dziedziczenie jest "private", to wszystkie pola/metody/.. z klasy bazowej przechodza z conajwyzej widocznoscia private, czyli zostaja totalnie przyciete. kazda rzecz ktora jest w bazie oznaczona jako:

  • public - bedzie private, TWOJA private
  • protected - bedzie private, TWOJA private
  • private - bedzie !private, bez zmian -- private BAZY(..)
  • oczywiscie do tego dochodzi aspekt, kto moze korzystac z Twojego dziedziczenia np. w celu rzutowania - czy wszyscy, czy dzieci, czy tylko ta klasa

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