22

以下の例のように、C ++がパラメーターの共分散をサポートしない理由、またはそれを実現する方法があるかどうかを知りたいと思いました。

class base {
public:
virtual base* func(base * ptr) { return new base(); }
};

class derived : public base {
 public:
 virtual derived* func(derived * ptr) override { return new derived(); } //not allowed
};
4

1 に答える 1

22

derivedから継承するため、戻り型は許可されbaseますが、関数パラメーターは機能しません。すべてのbaseインスタンスderivedも機能するわけではありません。以外のパラメータを使用してfuncへのポインタでが呼び出された場合はどうなるでしょうか。最も派生した実装は呼び出し可能ではありません。basederived

于 2012-08-06T00:09:55.193 に答える