这个问题类似,但是是关于从类内部调用函数:如果我重写基类的虚函数,我可以调用它吗?
在这种情况下,您可以指定
Base::function()
而不是 function()
,这将调用覆盖的定义。
但是有没有办法在课堂之外做到这一点呢?我的类没有定义复制构造函数,所以我不知道如何转换为基类:
Base( derived_object ).function()
在这里将
& derived_object
转换为 Base*
然后调用 ->function()
是否合适?
感谢您的见解。
尝试
derived_object.Base::function();
说明:
Class::function
是成员函数的“全名”。如果您没有为函数调用指定 Class::
前缀,它将查找“默认”前缀(在您的情况下:派生的前缀)。
我相信语法:
derived_ptr->Base::function();
效果很好。虽然我真的很怀疑为什么你想在不属于你的类的函数中执行此操作。特别是如果
function
恰好是一个虚函数。
这是一个有问题的想法的原因是,您正在制作使用该表示法的任何内容,这取决于您的类的继承层次结构。此外,函数通常会因某种原因被覆盖。您可以通过使用此语法来解决这个问题。
您可能想使用指向类的成员函数的指针。这些使您能够根据需要将不同的基类函数映射到指针,并能够将其用作变量或函数参数。
指向成员函数的指针的语法如下所示
class Base
{
public:
virtual bool Function();
virtual bool OtherFunction();
};
typedef bool (Base::*)() BaseFunc;
使用这些东西的注意事项列表有一英里长——网上有很多关于如何使用它们的信息(大多数答案都是“不要”)。然而,它们确实为您提供了一种明确绑定和调用基类成员函数的方法。