C 関数は静的と仮想の両方になれますか?
静的と仮想の両方のメンバー関数を持つことが望ましいように思えるかもしれませんが、 C では、これを実現する直接的な方法は提供されていません。関数を static virtual member() として宣言するとコンパイル エラーが発生しますが、目的の動作をシミュレートする別のアプローチがあります:
非静的仮想関数の実装:
最も簡単な解決策は、非静的仮想関数を作成することです。これにより、インスタンスとクラスの両方で関数を呼び出すことができます:
<code class="cpp">struct Object { virtual const TypeInformation& GetTypeInformation() const; }; struct SomeObject : public Object { virtual const TypeInformation& GetTypeInformation() const; };</code>
冗長静的非仮想関数:
特定の派生クラスのバージョンを呼び出す場合、仮想的にオブジェクト インスタンスが必要ない場合は、冗長な静的非仮想関数を提供できます:
<code class="cpp">struct Object { virtual const TypeInformation& GetTypeInformation() const; static const TypeInformation& GetTypeInformation(const Object&); }; struct SomeObject : public Object { virtual const TypeInformation& GetTypeInformation() const; static const TypeInformation& GetTypeInformation(const SomeObject&); };</code>
関数と定数のアプローチ:
別のオプションを使用することもできます。各クラスの個別の関数と定数:
<code class="cpp">struct Object { const TypeInformation& GetTypeInformation() const; static const TypeInformation& GetClassTypeInformation(); }; struct SomeObject : public Object { const TypeInformation& GetTypeInformation() const; static const TypeInformation& GetClassTypeInformation(); };</code>
結論:
C は静的仮想メンバー、非静的仮想関数、または冗長静的関数をネイティブにサポートしていません。同様の機能を実現するための実行可能な代替手段を提供します。どのアプローチを選択するかは、アプリケーションの特定の要件によって異なります。
以上がC 関数は静的と仮想の両方に使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。