C ++ 11 dziedziczy konstruktory i modyfikatory dostępu
Zakładając następujący układ:
class Base
{
protected:
Base(P1 p1, P2 p2, P3 p3);
public:
virtual void SomeMethod() = 0;
}
class Derived : public Base
{
public:
using Base::Base;
public:
virtual void SomeMethod() override;
};
Czy powinienem być w stanie określićDerived
konstruktor jak publiczność tutaj? VC ++ daje następujący błąd:
nie można uzyskać dostępu do chronionego członka zadeklarowanego w klasie „Derived”
kompilator wygenerował tutaj „Derived :: Derived” [wskazuje na używaną bazę :: Linia bazowa]
patrz deklaracja „Derived”
tj. ignoruje modyfikator dostępu powyżej odziedziczonego konstruktora.
Czy to ograniczenie funkcji? To nie ma sensu dlaBase
klasa, aby mieć publiczny konstruktor, ponieważ nigdy nie można jej utworzyć bezpośrednio (ze względu na czystą metodę wirtualną).