前言
C++有多態(tài)與繼承,但是很多人開始學(xué)習(xí)C++,有時(shí)候會(huì)面臨一個(gè)常見問題,就是如何向下轉(zhuǎn)型,特別是不知道具體類型的時(shí)候,這個(gè)時(shí)候就希望C++ 可以向Java或者Python中有instanceof這個(gè)函數(shù),可實(shí)際上C++中沒有。但是別著急,其實(shí)C++中有兩種簡(jiǎn)單的方法可以實(shí)現(xiàn)類似Java中的instanceof的功能。
在 C++ 中,確定對(duì)象的類型是編程中實(shí)際需求,使開發(fā)人員能夠做出動(dòng)態(tài)決策并執(zhí)行特定于類型的操作。無論是在編譯時(shí)檢查類型,還是在運(yùn)行時(shí)動(dòng)態(tài)標(biāo)識(shí)對(duì)象類型,C++ 都提供了強(qiáng)大的機(jī)制來獲取類型信息
使用typeid.name()方法
尋找實(shí)例的類類型,代碼演示如下:
使用std::is_same方法
代碼實(shí)現(xiàn)與運(yùn)行效果如下:
使用dynamic_cast
dynamic_cast方法轉(zhuǎn)型是C++中一種非常杰出的方法。通過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文章
4308瀏覽量
62444 -
C++
+關(guān)注
關(guān)注
22文章
2104瀏覽量
73503 -
python
+關(guān)注
關(guān)注
56文章
4783瀏覽量
84473
原文標(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)先 登錄
相關(guān)推薦
評(píng)論