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