現在、クラス(myClass)のメンバーをBaseクラスの派生クラス(Derived1、Derived2、...)に設定しようとしています。クラスはそれがどの派生クラスであるか分からないので、メンバ型はBaseクラスに設定され、構築時に派生クラスにのみ設定されます。「未知」の派生クラスを基本クラスとしてメンバーとして宣言し、派生バージョンのメンバー関数を呼び出す方法を教えてください。
派生クラスはすべて、別々に実装された共通メンバー関数を持ちます(基本クラスには仮想バージョンがあります)。ただし、この関数がmyClassから呼び出されると、派生クラスではなく、常にBaseクラスのバージョンが呼び出されます。
class Base
{
public:
Base(){}
virtual void who() { cout << "this is Base"; }
}
class Derived1 : public Base
{
public:
Derived1() : Base() {}
void who() { cout << "this is Derived1"; }
}
class myClass
{
private:
Base unknownDerived;
public:
myClass(const Base& inputDerived) { unknownDerived = inputDerived; }
void whosthere() { unknownDerived.who(); }
}
上記の出力は「This is Base」で、代わりにBaseクラスのバージョンが呼び出されます。
実際の派生クラスを指定せずにメンバーを含めることはできますが、特定の関数(who())を呼び出すことはできますか?
ありがとう!
このコードの実行方法は表示されません。 'メイン 'を含めてください –
あなたの未知の未知数は[スライス]されています(https://en.wikipedia.org/wiki/Object_slicing) – Kevin
@MadPhysicistメインは です。 test.whosthere(); ' – alam