Использование защищенных методов базового класса внутри переопределенной (новой) функции производного класса

Я пытался сделать что-то похожее на вызов Java "super", который, как я думал, будет возможен следующим образом:

public ref class base {

public: base(){}

protected: virtual void funct()
{
   MessageBox::Show("base funct");
}
};

public ref class derived : public base
{
public: derived() : base(){}

protected: virtual void funct() new
{
((Base^)this)->funct();
///some work
}
};

Но это выдает ошибку "Функции-кандидаты недоступны". Разве модификатор "protected" не дает доступ к элементам базового класса всем его подклассам? Я не знаю, имеет ли это какое-то значение, но метод базового класса, который я хочу переопределить, также наследуется Base.


person user1079475    schedule 23.07.2012    source источник


Ответы (1)


Ваш синтаксис неверен, вы можете вызывать такие базовые функции.

base::funct();

Он жалуется, потому что после приведения у вас есть экземпляр base. Функция funct() защищена, поэтому вы не можете вызвать ее для данного экземпляра base.

person Chris Hannon    schedule 23.07.2012
comment
Это сработало, спасибо. Впервые я использовал буквально базу, потому что подумал, что это может быть выражение, как в С#: P - person user1079475; 24.07.2012