前言
C++有多態(tài)與繼承,但是很多人開(kāi)始學(xué)習(xí)C++,有時(shí)候會(huì)面臨一個(gè)常見(jiàn)問(wèn)題,就是如何向下轉(zhuǎn)型,特別是不知道具體類型的時(shí)候,這個(gè)時(shí)候就希望C++ 可以向Java或者Python中有instanceof這個(gè)函數(shù),可實(shí)際上C++中沒(méi)有。但是別著急,其實(shí)C++中有兩種簡(jiǎn)單的方法可以實(shí)現(xiàn)類似Java中的instanceof的功能。
在 C++ 中,確定對(duì)象的類型是編程中實(shí)際需求,使開(kāi)發(fā)人員能夠做出動(dòng)態(tài)決策并執(zhí)行特定于類型的操作。無(wú)論是在編譯時(shí)檢查類型,還是在運(yùn)行時(shí)動(dòng)態(tài)標(biāo)識(shí)對(duì)象類型,C++ 都提供了強(qiáng)大的機(jī)制來(lái)獲取類型信息
使用typeid.name()方法
尋找實(shí)例的類類型,代碼演示如下:
使用std::is_same方法
代碼實(shí)現(xiàn)與運(yùn)行效果如下:
使用dynamic_cast
dynamic_cast方法轉(zhuǎn)型是C++中一種非常杰出的方法。通過(guò)dynamic_cast操作符允許跨類層次結(jié)構(gòu)動(dòng)態(tài)轉(zhuǎn)換指針和引用,從而在運(yùn)行時(shí)確認(rèn)和轉(zhuǎn)換類型。代碼演示如下:
完整測(cè)試源代碼
1#include2#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<"Type?is?Aircraft"?<::value){ 28std::cout<"Type?is?Vehicles"?<(ptrBase); 47if(ptrDerived){ 48std::cout<"Object?is?of?type?Derived"?<(); 64printType (); 65 66return0; 67}
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4376瀏覽量
64530 -
C++
+關(guān)注
關(guān)注
22文章
2118瀏覽量
74961 -
python
+關(guān)注
關(guān)注
56文章
4825瀏覽量
86444
原文標(biāo)題:技巧 | C++中實(shí)現(xiàn)類似instanceof的方法
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
C語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮姆绞?C++中的class的運(yùn)行原理
學(xué)習(xí)C++的方法以及C++的就業(yè)方向
密碼編碼學(xué)(加密方法的C與C++實(shí)現(xiàn)) pdf第二版
C++靜態(tài)分析中對(duì)泛型構(gòu)件的識(shí)別與表示方法
如何利用C++也實(shí)現(xiàn)RMI功能
C++反編譯中控制流圖優(yōu)化方法研究

C++程序在Visual_C++6.0編譯系統(tǒng)中的實(shí)現(xiàn)
VISUAL C++教程之VISUAL C++的安裝和使用方法

在C++中如何用虛函數(shù)實(shí)現(xiàn)多態(tài)
虛擬機(jī)的設(shè)計(jì)與實(shí)現(xiàn):C\C++
介紹在C++中實(shí)現(xiàn)回調(diào)的幾種方法
instanceof在java中的用法
EE-112:模擬C++中的類實(shí)現(xiàn)

評(píng)論