我已經做了好幾年的C 作業,但沒有接受過正式的培訓。 我的大部分背景是航空航天,在那里我們不得不總是重新發明輪子,不使用第三方庫或 API,所以這些對我來說有點陌生。
我正在做一些確實有API的作業,我對一些現有的代碼感到有點困惑。 當詢問同事時,他們也沒有任何答案。
我有一個繼承了 API 的Application類的類。這個Application類有一個名為onUpdate()的受保護虛函式,描述為:
用于更新邏輯的函式回呼,每一幀都被呼叫class MyApp : public Application { public: virtual void onUpdate() override。 } void MyApp::onUpdate() { Application::onUpdate(); //Why do this? ...首先,我以為回呼中會有一些函式指標、lambda之類的東西。
有人提到的唯一答案是,這是一件 "典型 "的事情,以便呼叫
Application::onUpdate()函式,這可能是不同的。 但是,如果有基類實作的話,宣告一個虛擬函式不是要覆寫基類的實作嗎?我認為,如果這是必要的,那么檔案中會提到 "如果你選擇撰寫自己的函式,請確保呼叫基類的
onUpdate函式"。我已經嘗試在呼叫處設定斷點,但似乎沒有任何作用。 我在想是不是編譯器把它優化掉了,即使我有
-O0。 我可以洗掉它,代碼似乎運行得很好,但它相當復雜,所以我不想造成一些下游問題。我甚至不知道該怎么搜索。我似乎找不到一個類似的例子。 這種實作是否有一個正式的名稱? 我很難把我的大腦包裹起來。
uj5u.com熱心網友回復:
我認為最初的問題已經在我提供的資訊中得到了最好的回答。
框架的實作決定了如何使用它。 在我的案例中,具體的框架隱藏了很多細節。 雖然這并不常見,但也并非聞所未聞,可以認為是一種反模式,即 "呼叫超級"
感謝您的支持。
謝謝你的幫助。
uj5u.com熱心網友回復:
為什么要從繼承類中呼叫基類的虛擬成員呢?
如果你想/需要覆寫函式做基函式所做的事情,那么呼叫該函式而不是重復代碼可能會很有用。如果該函式訪問基函式的私有狀態,這甚至可能是必要的。
我認為,如果這是必要的,那么檔案中會提到 "如果您選擇撰寫您自己的函式,請確保呼叫基類的 onUpdate 函式 "這樣的話。在有必要的情況下,基類的檔案最好也能這樣說。
這個實作是否有一個正式的名稱?
如果你的意思是 "這種設計模式是否有一個名稱",你的問題中沒有足夠的細節來準確回答,但僅根據名稱,我猜測這是觀察者模式的一部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/320095.html
標籤:
下一篇:SVG屏蔽問題
