Подтвердить что ты не робот

Есть ли способ вызвать базовую функцию вне класса в С++?

Этот вопрос аналогичен, но касается вызова функции внутри класса: Можно ли вызвать виртуальную функцию базового класса, если я ее переопределяю?

В этом случае вы должны указать Base::function() вместо function(), который вызовет переопределенное определение.

Но есть ли способ сделать это за пределами класса? Мой класс не определяет конструктор копирования, поэтому я не мог понять, как отличить его как базовый класс:

Base( derived_object ).function()

Здесь нужно сделать отличную & derived_object как Base*, а затем вызвать ->function()?

Спасибо за понимание.

4b9b3361

Ответ 1

Попробуйте derived_object.Base::function();

Ответ 2

Я считаю, что синтаксис:

derived_ptr->Base::function();

работает просто отлично. Хотя я действительно сомневаюсь, почему вы хотели бы сделать это в функции, которая не является частью вашего класса. Особенно, если function оказывается виртуальной функцией.

Причина, по которой сомнительная идея заключается в том, что вы делаете то, что использует эту нотацию, зависит от иерархии наследования вашего класса. Кроме того, функции, как правило, переопределяются по какой-либо причине. И вы обойдете это, используя этот синтаксис.

Ответ 3

Вероятно, вы хотите использовать указатели для функций-членов класса. Это дает вам возможность сопоставлять различные функции базового класса указателю по мере необходимости и возможность использовать его в качестве параметра переменной или функции.

Синтаксис для указателя на функцию-член выглядит как

class Base
{
public:
    virtual bool Function();
    virtual bool OtherFunction();
};

typedef bool (Base::*)() BaseFunc;

Список предостережений для использования этих вещей длится милю - есть много онлайн о том, как их использовать (большинство ответов - "не нужно" ). Тем не менее, они дают вам способ четко связывать и вызывать функцию-член базового класса.