我有一個繼承另一個類(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中的重寫函數。是這樣嗎? – Gangadhar 2012-03-10 02:29:56
這是正確的。另外,假設我實現了繼承A的'C類'。當我調用'C c; c.callF()',我希望它調用C的f()版本。 – sFuller 2012-03-10 02:34:37
而且你會...... – 2012-03-10 02:38:16