C の仮想関数の戻り型
質問:
継承されたクラスは、テンプレートを使用せずに、異なる戻り値の型を持つ仮想関数return?
答え:
場合によっては、はい。戻り値の型が元の戻り値の型と共変である場合、派生クラスが異なる戻り値の型で仮想関数をオーバーライドすることが許可されます。共分散とは、派生関数の戻り値の型が基本関数の戻り値の型のサブタイプであることを意味します。
次の例を考えてみましょう:
class Base { public: virtual ~Base() {} virtual Base* clone() const = 0; }; class Derived: public Base { public: virtual Derived* clone() const { return new Derived(*this); } };
この例では、Base クラスは以下を定義します。 Base* を返す clone という名前の純粋な仮想関数。 Derived クラスはこの仮想関数をオーバーライドし、Derived* を返します。戻り値の型が基本クラスと異なる場合でも、Derived* は Base* のサブタイプであるため、これは有効です。
一般に、関数の戻り値の型はそのシグネチャの一部とはみなされません。戻り値の型が共変である限り、任意の戻り値の型でメンバー関数をオーバーライドできます。
以上が派生クラスは C の異なる戻り値の型で仮想関数をオーバーライドできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。