这个问题很相似,但是关于从类中调用函数:Can I call a base class's virtual function if I'm overriding it?
在这种情况下,您需要指定Base::function()
而不是function()
,这将调用重写的定义。
但是有没有办法在课外做到这一点?我的类没有定义复制构造函数,所以我无法弄清楚如何作为基类进行转换:
Base( derived_object ).function()
在这里做适当的事情是将& derived_object
转换为Base*
,然后致电->function()
?
感谢您的见解。
答案 0 :(得分:21)
尝试derived_object.Base::function();
答案 1 :(得分:10)
我相信语法:
derived_ptr->Base::function();
工作得很好。虽然我真的质疑你为什么要在一个不属于你班级的功能中这样做。特别是如果function
碰巧是虚函数的话。
这是一个值得怀疑的想法的原因是你正在做任何使用该符号的东西取决于你的类的继承层次结构。此外,由于某种原因,通常会覆盖函数。而且你通过使用这种语法来解决这个问题。
答案 2 :(得分:0)
您可能希望使用指向类的成员函数的指针。这些使您能够根据需要将不同的基类函数映射到指针,并能够将其用作变量或函数参数。
指向成员函数的指针的语法类似于
class Base
{
public:
virtual bool Function();
virtual bool OtherFunction();
};
typedef bool (Base::*)() BaseFunc;
使用这些东西的注意事项列表长达一英里 - 网上有很多关于如何使用它们的信息(大多数答案都是“不要”)。但是,它们确实为您提供了一种明确绑定和调用基类成员函数的方法。