доступа Если предположить, что следующий макет:C++ 11 унаследовавшие Конструкторы и модификаторы
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
«s, как публика здесь? VC++ дает следующее сообщение об ошибке:
cannot access protected member declared in class 'Derived'
compiler has generated 'Derived::Derived' here [points to the using Base::Base line]
see declaration of 'Derived'
т.е. он игнорирует модификатор доступа выше унаследованного конструктора.
Это ограничение функции? Для класса Base
не имеет смысла иметь открытый конструктор, поскольку он никогда не может быть создан непосредственно (из-за чистого виртуального метода).
[Пример GCC 4.8. Правильно.] (Http://ideone.com/7JpC2J) –
Подождите, что особенного в конструкторах? То же самое относится и к обычным функциям ... – Mehrdad
@TemplateRex: Я знаю, я спрашиваю, почему. – Mehrdad