【发布时间】:2012-03-10 02:24:59
【问题描述】:
我有一个继承另一个类 (A) 的类 (B)。我想从已被覆盖的 A 类中调用一个函数。我还希望能够独立于继承基的类调用被覆盖的函数(比如 class C : public A ,我想在其中调用 C 的函数版本。)
这是一个例子
class A {
public:
void callF();
virtual void f() {};
};
class B : public A {
public:
void f();
};
void A::callF()
{
//FYI, I want to be able to call this without knowing what the super class is.
f();
}
void B::f()
{
std::cout << "I want this function to be called, but instead the default f() is called.";
}
编辑:
在我的真实代码中,我有一个std::vector<A> aVector;。然后我会打电话给aVector.push_back(B());。如果我调用aVector[0].callF();,默认的a::f() 将被调用。
如下所述,我在切片时遇到问题。
【问题讨论】:
-
请稍微澄清一下您的问题。当从基类调用被覆盖的函数 f() 时,您希望能够调用它。在上面的示例中,当您在类 A 中调用 f() 时,您希望调用 B 中的覆盖函数。是这样吗?
-
没错。另外,假设我实现了继承 A 的
class C。当我调用C c; c.callF()时,我希望它调用 C 的 f() 版本。 -
您提供给我们的代码完全符合您的要求。如果您的程序表现不同,则问题可能在于您没有向我们展示的内容。请创建一个小型的完整程序来演示问题并将该程序粘贴到您的问题中。 sscce.org
-
你的虚拟继承在哪里?
标签: c++ class inheritance vector