Ответ 1
Попробуйте derived_object.Base::function();
Этот вопрос аналогичен, но касается вызова функции внутри класса: Можно ли вызвать виртуальную функцию базового класса, если я ее переопределяю?
В этом случае вы должны указать Base::function()
вместо function()
, который вызовет переопределенное определение.
Но есть ли способ сделать это за пределами класса? Мой класс не определяет конструктор копирования, поэтому я не мог понять, как отличить его как базовый класс:
Base( derived_object ).function()
Здесь нужно сделать отличную & derived_object
как Base*
, а затем вызвать ->function()
?
Спасибо за понимание.
Попробуйте derived_object.Base::function();
Я считаю, что синтаксис:
derived_ptr->Base::function();
работает просто отлично. Хотя я действительно сомневаюсь, почему вы хотели бы сделать это в функции, которая не является частью вашего класса. Особенно, если function
оказывается виртуальной функцией.
Причина, по которой сомнительная идея заключается в том, что вы делаете то, что использует эту нотацию, зависит от иерархии наследования вашего класса. Кроме того, функции, как правило, переопределяются по какой-либо причине. И вы обойдете это, используя этот синтаксис.
Вероятно, вы хотите использовать указатели для функций-членов класса. Это дает вам возможность сопоставлять различные функции базового класса указателю по мере необходимости и возможность использовать его в качестве параметра переменной или функции.
Синтаксис для указателя на функцию-член выглядит как
class Base
{
public:
virtual bool Function();
virtual bool OtherFunction();
};
typedef bool (Base::*)() BaseFunc;
Список предостережений для использования этих вещей длится милю - есть много онлайн о том, как их использовать (большинство ответов - "не нужно" ). Тем не менее, они дают вам способ четко связывать и вызывать функцию-член базового класса.