0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中實現(xiàn)類似instanceof的方法

OpenCV學(xué)堂 ? 來源:OpenCV學(xué)堂 ? 2024-07-18 10:16 ? 次閱讀

前言

C++有多態(tài)與繼承,但是很多人開始學(xué)習(xí)C++,有時候會面臨一個常見問題,就是如何向下轉(zhuǎn)型,特別是不知道具體類型的時候,這個時候就希望C++ 可以向Java或者Python中有instanceof這個函數(shù),可實際上C++中沒有。但是別著急,其實C++中有兩種簡單的方法可以實現(xiàn)類似Java中的instanceof的功能。

在 C++ 中,確定對象的類型是編程中實際需求,使開發(fā)人員能夠做出動態(tài)決策并執(zhí)行特定于類型的操作。無論是在編譯時檢查類型,還是在運行時動態(tài)標識對象類型,C++ 都提供了強大的機制來獲取類型信息

使用typeid.name()方法

尋找實例的類類型,代碼演示如下:

2e1a5748-44a6-11ef-b8af-92fbcf53809c.png

使用std::is_same方法

代碼實現(xiàn)與運行效果如下:

2e323b6a-44a6-11ef-b8af-92fbcf53809c.png

使用dynamic_cast

dynamic_cast方法轉(zhuǎn)型是C++中一種非常杰出的方法。通過dynamic_cast操作符允許跨類層次結(jié)構(gòu)動態(tài)轉(zhuǎn)換指針和引用,從而在運行時確認和轉(zhuǎn)換類型。代碼演示如下:

2e559fec-44a6-11ef-b8af-92fbcf53809c.png

完整測試源代碼

 1#include
 2#include
 3#include
 4
 5usingnamespacecv;
 6usingnamespacestd;
 7
 8classVehicles{
 9public:
10stringmake;
11stringmodel;
12stringyear;
13};
14
15classAircraft{
16public:
17stringmake;
18stringmodel;
19stringyear;
20};
21
22template
23voidprintType(){
24if(std::is_same::value){
25std::cout<::value){
28std::cout<(ptrBase);
47if(ptrDerived){
48std::cout<();
64printType();
65
66return0;
67}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4256

    瀏覽量

    62223
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2090

    瀏覽量

    73404
  • python
    +關(guān)注

    關(guān)注

    54

    文章

    4756

    瀏覽量

    84283

原文標題:技巧 | C++中實現(xiàn)類似instanceof的方法

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    C語言實現(xiàn)面向?qū)ο蟮姆绞?C++的class的運行原理

    這里主要介紹下在C語言中是如何實現(xiàn)的面向?qū)ο?。知道?b class='flag-5'>C語言實現(xiàn)面向?qū)ο蟮姆绞?,再?lián)想下,C++
    發(fā)表于 10-21 09:00 ?1083次閱讀

    C/C++調(diào)用Java不同類的靜態(tài)方法有哪些

    C/C++調(diào)用Java不同類的靜態(tài)方法有哪些?C/C++
    發(fā)表于 09-30 08:12

    學(xué)習(xí)C++方法以及C++的就業(yè)方向

    學(xué)習(xí)方向:嵌入式+人工智能嵌入式是一門技術(shù)學(xué)習(xí)目標1.嵌入式開發(fā)概述;(面向?qū)ο笤谇度胧介_發(fā)角色)2.嵌入式Linux C++編程;(C++概述、C++學(xué)習(xí)
    發(fā)表于 12-24 07:32

    密碼編碼學(xué)(加密方法CC++實現(xiàn)) pdf第二版

    密碼編碼學(xué)(加密方法CC++實現(xiàn))分分三個部分。第一部分描述密碼學(xué)的常用算法和數(shù)論算法,以及這些算法的
    發(fā)表于 09-25 09:49 ?0次下載

    C++靜態(tài)分析對泛型構(gòu)件的識別與表示方法

    本文從C++靜態(tài)分析的角度出發(fā),介紹了模板和泛型構(gòu)件技術(shù)、一個C++靜態(tài)分析器實現(xiàn)對模板和基本泛型構(gòu)件的分析和識別方法、以及一種基于UML
    發(fā)表于 08-17 11:16 ?14次下載

    如何利用C++實現(xiàn)RMI功能

    由于沒有類似java的“反射”機制,標準C++實現(xiàn)RMI似乎有些困難。為C++程序員所熟悉的Boost庫雖然有RCF實現(xiàn)
    發(fā)表于 11-17 18:12 ?14次下載

    C++內(nèi)部類的實現(xiàn)及應(yīng)用

    多重繼承一直是C++語言中一個廣受爭議的語言特征。一般認為,在面向?qū)ο笤O(shè)計應(yīng)該謹慎使用多重繼承。文章分析了C++多重繼承實現(xiàn)的復(fù)雜性并對
    發(fā)表于 06-28 17:59 ?50次下載
    <b class='flag-5'>C++</b>內(nèi)部類的<b class='flag-5'>實現(xiàn)</b>及應(yīng)用

    C++反編譯控制流圖優(yōu)化方法研究

    控制流分塊是反編譯系統(tǒng)基本的功能之一。介紹了控制流分塊方法,分析了C++語言與C語言的區(qū)別,指出了現(xiàn)有的控制流分塊方法用于
    發(fā)表于 11-14 10:53 ?10次下載
    <b class='flag-5'>C++</b>反編譯<b class='flag-5'>中</b>控制流圖優(yōu)化<b class='flag-5'>方法</b>研究

    C++程序在Visual_C++6.0編譯系統(tǒng)實現(xiàn)

    C++程序在Visual_C++6.0編譯系統(tǒng)實現(xiàn)。
    發(fā)表于 05-04 11:09 ?1次下載

    VISUAL C++教程之VISUAL C++的安裝和使用方法

    本文檔的主要內(nèi)容詳細介紹的是VISUAL C++教程之VISUAL C++的安裝和使用方法資料免費下載。
    發(fā)表于 12-27 16:32 ?19次下載
    VISUAL <b class='flag-5'>C++</b>教程之VISUAL <b class='flag-5'>C++</b>的安裝和使用<b class='flag-5'>方法</b>

    EE-112:模擬C++的類實現(xiàn)

    EE-112:模擬C++的類實現(xiàn)
    發(fā)表于 05-27 16:13 ?2次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的類<b class='flag-5'>實現(xiàn)</b>

    C++如何用虛函數(shù)實現(xiàn)多態(tài)

    01 — C++虛函數(shù)探索 C++是一門面向?qū)ο笳Z言,在C++里運行時多態(tài)是由虛函數(shù)和純虛函數(shù)實現(xiàn)的,現(xiàn)在我們看下在C++
    的頭像 發(fā)表于 09-29 14:18 ?1641次閱讀

    虛擬機的設(shè)計與實現(xiàn):C\C++

    虛擬機的設(shè)計與實現(xiàn):C\C++
    發(fā)表于 02-21 15:10 ?0次下載

    介紹在C++實現(xiàn)回調(diào)的幾種方法

    C++的一個重要概念就是類,所以我們一般想讓類的成員函數(shù)作為回調(diào)函數(shù)(如果直接用非類的成員函數(shù)作為回調(diào)函數(shù),其實就和C語言中的方法一樣),但是想
    的頭像 發(fā)表于 01-18 15:09 ?3352次閱讀

    instanceof在java的用法

    instanceof是一個Java關(guān)鍵字,用于判斷一個對象是否是某個類的實例,或者是其子類的實例。 instanceof的語法是: object instanceof class 其中,object
    的頭像 發(fā)表于 11-21 10:25 ?2268次閱讀