关于oop:有没有办法在C ++中调用类外的基函数?

Is there a way to call a base function outside of the class in C++?

这个问题是类似的,但是关于从类内部调用函数:如果我重写了一个基类的虚函数,我可以调用它吗?

在这种情况下,您将指定Base::function(),而不是function(),它将调用被重写的定义。

但是有没有一种方法可以在课堂之外做到这一点?我的类没有定义复制构造函数,因此我无法确定如何将其强制转换为基类:

1
Base( derived_object ).function()

& derived_object转换成Base*,然后调用->function(),这样做合适吗?

谢谢你的洞察力。


试试derived_object.Base::function();


我相信语法:

1
derived_ptr->Base::function();

工作很好。尽管我真的很怀疑为什么你要在一个不属于你的类的函数中这样做。尤其是当function恰好是一个虚拟函数时。

这是一个值得怀疑的想法的原因是,使用这个符号所做的一切都取决于类的继承层次结构。此外,函数通常由于某种原因被重写。你可以用这个语法来解决这个问题。


您可能想使用指向类成员函数的指针。它们使您能够根据需要将不同的基类函数映射到指针,并能够将其用作变量或函数参数。

指向成员函数的指针的语法如下

1
2
3
4
5
6
7
8
class Base
{
public:
    virtual bool Function();
    virtual bool OtherFunction();
};

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

使用这些东西的注意事项列表有一英里长——网上有很多关于如何使用它们的信息(大多数答案是"不要")。但是,它们确实为您提供了一种明确绑定和调用基类成员函数的方法。