ホームページ >バックエンド開発 >C++ >C 仮想関数が共変の戻り値型を持つことができるのはいつですか?

C 仮想関数が共変の戻り値型を持つことができるのはいつですか?

DDD
DDDオリジナル
2024-11-28 05:33:16539ブラウズ

When Can C   Virtual Functions Have Covariant Return Types?

C 仮想関数の共変戻り型

C では、継承されたクラスが異なる戻り型の仮想関数を実装することが可能です。ただし、これらの戻り値の型は、元の戻り値の型と共変である必要があります。

共分散とは、派生クラスの戻り値の型が、少なくとも基本クラスの戻り値の型と同じように派生していることを意味します。たとえば、基底クラス関数が Base ポインターを返す場合、派生クラス関数は Derived ポインターを返すことができます。

これが許可されるのは、派生クラス オブジェクトへのポインターはすべて、基底クラスへのポインターに暗黙的に変換できるためです。物体。したがって、派生クラスの実装が派生クラス オブジェクトへのポインターを返したとしても、基本クラスの仮想関数への呼び出しは常に基本クラス オブジェクトへのポインターを返すことができます。

次の例を考えてみましょう。

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 ポインターを返す純粋な仮想関数のクローンを定義します。 Derived クラスでは、clone 関数は Derived ポインターを返すようにオーバーライドされます。 Derived は Base の派生クラスであり、Derived ポインターは暗黙的に Base ポインターに変換できるため、これが許可されます。

以上がC 仮想関数が共変の戻り値型を持つことができるのはいつですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。