Предполагая следующий макет:
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;
};
Должен ли я указывать конструктор Derived
как открытый здесь? VС++ дает следующую ошибку:
не может получить доступ к защищенному члену, объявленному в классе "Производные"
компилятор сгенерировал "Derived:: Derived" здесь [указывает на использование Base:: Base линия]
см. объявление "Производные"
то есть. он игнорирует модификатор доступа над унаследованным конструктором.
Это ограничение функции? Для класса Base
не имеет никакого смысла иметь открытый конструктор, поскольку он никогда не может быть создан непосредственно (из-за чистого виртуального метода).