我有一个继承另一个类(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()
。如下所述,我在切片时遇到了问题。
最佳答案
您的构造:
vector_of_A.push_back( B() );
在向量中不存储
B
。它构造一个B
,然后从中构造一个A
,然后将该A
存储在向量中。结果,您遇到切片。看到更多信息:
https://stackoverflow.com/a/4403759/8747
关于c++ - 如何从基类中的函数调用重载函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9643413/