C 函數可以同時是靜態和虛擬的嗎?
雖然看起來可能需要一個既是靜態又是虛擬的成員函數, C 沒有提供直接的方法來實現這一點。雖然將函數宣告為靜態虛擬成員()將導致編譯錯誤,但還有其他方法可以模擬所需的行為:
實作非靜態虛擬函數:
最直接的解決方案是建立一個非靜態虛函數。這允許在實例和類別上呼叫該函數:
<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中文網其他相關文章!