」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何實作 Java 的「instanceof」運算子的 C++ 等效項?

如何實作 Java 的「instanceof」運算子的 C++ 等效項?

發佈於2024-11-17
瀏覽:768

How to Achieve the C   Equivalent of Java\'s \

如何實現C 語言中的Java 的instanceof

在Java 中,「instanceof」運算子可讓您確定一個物件是否屬於某某個物件特定的類別或介面。在 C 中,有多種方法可以實現此功能。

使用 RTTI 進行動態轉換

一種方法是使用啟用了運行時類型資訊 (RTTI) 的動態轉換。這要求您包含必要的標頭:

#include 
#include 

然後您可以使用以下指令執行動態轉換:

if(NewType* v = dynamic_cast(old)) {
   // old was safely casted to NewType
   v->doSomething();
}

請注意,此方法需要在編譯器中啟用 RTTI 支援。

虛擬函數

另一種方法是使用虛擬函數。您可以在基底類別中定義虛函數並在衍生類別中重寫它。然後,您可以透過呼叫物件的虛擬函數來檢查物件的動態類型:

class Base {
public:
    virtual void doSomething() {}
};

class Derived : public Base {
public:
    void doSomething() override {}
};

...

if(auto* derived = dynamic_cast(old)) {
    derived->doSomething();
}

型開關

最後,您可以使用型別開關來決定物件的動態型別。這種方法依賴 type_info 類別:

if(old.IsSameAs(typeid(NewType))) {
    // old was safely casted to NewType
    NewType* v = static_cast(old);
    v->doSomething();
}

注意事項

雖然這些方法提供與Java 的“instanceof”運算符類似的功能,但重要的是要記住動態轉換和類型檢查可能會導致效能損失。建議考慮使用虛擬功能或類型開關等替代方法,以便在關鍵應用程式中獲得更好的效能。

最新教學 更多>
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符在postgresql中提取最後一行,您可能需要遇到與數據集合中每個不同標識的信息相關的信息。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: id dat...
    程式設計 發佈於2025-03-13
  • 版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    在時間戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源於遺留實現的關注,這些限制需要對當前的_timestamp功能進行特定的實現。 創建表`foo`( `Productid` int(10)unsigned not ...
    程式設計 發佈於2025-03-13
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在Java中的多個返回類型:一種誤解類型:在Java編程中揭示,在Java編程中,Peculiar方法簽名可能會出現,可能會出現,使開發人員陷入困境,使開發人員陷入困境。 getResult(string s); ,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但這確實是如此嗎...
    程式設計 發佈於2025-03-13
  • 我應該在班上創建災難嗎?
    我應該在班上創建災難嗎?
    何時需要創建析構函數? 在類設計中,開發者經常會糾結是否需要創建析構函數。 然而,理解析構函數的恰當用法至關重要。 創建析構函數的原因 通常只有當類持有昂貴的非託管資源(例如數據庫連接或文件句柄)時,才需要析構函數。在這種情況下,析構函數負責在不再需要對象時釋放這些資源,確保正確清理。 析...
    程式設計 發佈於2025-03-13
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣,如何? 答案:是的,可以將您的Encryption庫從McRypt升級到OpenSSL。 可以使用openssl。 附加說明: [openssl_decrypt()函數要求...
    程式設計 發佈於2025-03-13
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制,控制元素的滾動行為對於確保用戶體驗和可訪問性是必不可少的。一種這樣的方案涉及限制動態大小的父元素中元素的滾動範圍。 問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限...
    程式設計 發佈於2025-03-13
  • 如何從PHP中的數組中提取隨機元素?
    如何從PHP中的數組中提取隨機元素?
    從陣列中的隨機選擇,可以輕鬆從數組中獲取隨機項目。考慮以下數組:; 從此數組中檢索一個隨機項目,利用array_rand( array_rand()函數從數組返回一個隨機鍵。通過將$項目數組索引使用此鍵,我們可以從數組中訪問一個隨機元素。這種方法為選擇隨機項目提供了一種直接且可靠的方法。
    程式設計 發佈於2025-03-13
  • 為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    為什麼使用固定定位時,為什麼具有100%網格板柱的網格超越身體?
    網格超過身體,用100%grid-template-columns 為什麼在grid-template-colms中具有100%的顯示器,當位置設置為設置的位置時,grid-template-colly修復了? 問題: 考慮以下CSS和html: class =“ snippet-code”> ...
    程式設計 發佈於2025-03-13
  • 在PHP和MySQL中如何將日期格式化為dd/mm/yyyy?
    在PHP和MySQL中如何將日期格式化為dd/mm/yyyy?
    如何以dd/mm/yyyy格式顯示php mysql 答案: 使用strtotime iniester erie for intertotime(&&&&&&&&&&&&&&&得到,使用date()。 example: $ timestamp = strtotime($ date_from...
    程式設計 發佈於2025-03-13
  • 為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    在php ;?>" method="post">The intention is to capture the input from the text box and display it when the submit button is clicked.但是,輸出...
    程式設計 發佈於2025-03-13
  • 在Python中如何將集合劃分為所有可能的子集?
    在Python中如何將集合劃分為所有可能的子集?
    在python 手頭的任務是將一組元素分配到所有可能的子集中。例如,分區[1,2,3]產生以下子集: [[1],[2],[3]],[3]] [[1,2],[3]] [[1],[2,3]] [[1,3],[2]] [[1,2,3]] 遞歸解決方案 def partition(collection):...
    程式設計 發佈於2025-03-13
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call fil...
    程式設計 發佈於2025-03-13
  • 為什麼使用Firefox後退按鈕時JavaScript執行停止?
    為什麼使用Firefox後退按鈕時JavaScript執行停止?
    導航歷史記錄問題:JavaScript使用Firefox Back Back 此行為是由瀏覽器緩存JavaScript資源引起的。要解決此問題並確保在後續頁面訪問中執行腳本,Firefox用戶應設置一個空功能。 警報'); }; alert('inline Alert')...
    程式設計 發佈於2025-03-13
  • C#正則表達式:精確匹配完整單詞的技巧
    C#正則表達式:精確匹配完整單詞的技巧
    在C#中使用正則表達式匹配整個單詞 在使用正則表達式查找字符串中的匹配項時,確保只匹配整個單詞至關重要。考慮一下在內容字符串中匹配諸如“shoes”、“shirt”和“pants”等特定單詞的任務。 最初,人們可能會認為以下正則表達式就足夠了: Regex.Match(content, keyw...
    程式設計 發佈於2025-03-13
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-03-13

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3