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

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

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

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

Base( derived_object ).function()

- это подходящая вещь, чтобы сделать здесь, чтобы бросить & derived_object as Base* и затем вызов ->function()?

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

3 ответов


попробовать derived_object.Base::function();


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

derived_ptr->Base::function();

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

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


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

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

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

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

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