有没有办法在C++中调用类外部的基函数?

问题描述 投票:0回答:3

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

在这种情况下,您可以指定

Base::function()
而不是
function()
,这将调用覆盖的定义。

但是有没有办法在课堂之外做到这一点呢?我的类没有定义复制构造函数,所以我不知道如何转换为基类:

Base( derived_object ).function()

在这里将

& derived_object
转换为
Base*
然后调用
->function()
是否合适?

感谢您的见解。

c++ oop
3个回答
27
投票

尝试

derived_object.Base::function();

说明:

Class::function
是成员函数的“全名”。如果您没有为函数调用指定
Class::
前缀,它将查找“默认”前缀(在您的情况下:派生的前缀)。


13
投票

我相信语法:

derived_ptr->Base::function();

效果很好。虽然我真的很怀疑为什么你想在不属于你的类的函数中执行此操作。特别是如果

function
恰好是一个虚函数。

这是一个有问题的想法的原因是,您正在制作使用该表示法的任何内容,这取决于您的类的继承层次结构。此外,函数通常会因某种原因被覆盖。您可以通过使用此语法来解决这个问题。


0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.