私は別のクラス(A)を継承するクラス(B)を持っています。私はオーバーライドされたクラスAから関数を呼び出したい。私はまた、ベースを継承したものをクラスの独立した上書き関数を呼び出すことができるようにしたい(私は関数のCのバージョンを呼び出したいclass C : public A
を、と言う。)基本クラスの関数からオーバーロードされた関数を呼び出すにはどうすればよいですか?
は、ここでは一例
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
そうです。 また、Aクラスを継承するクラスCを実装したとします。 c.callF() 'を呼び出すと、Cのバージョンのf()を呼び出すことができます。 – sFuller
そしてあなたは... –