我有一个继承另一个类(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/

10-12 00:24
查看更多