亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++四種類型轉換

2019-11-06 06:41:41
字體:
來源:轉載
供稿:網友

C風格的強制類型轉換,格式如下兩種: *①Class(exPRession); ②(Class)expression;* 第一:不安全,沒有類型檢查; 第二:可讀性差,在代碼中不容易發現做了類型轉換。


C++的四類轉換:reinterpret_cast,const_cast,static_cast,dynamic_cast。分別對應于不同的應用場景。


static_cast 這里寫圖片描述

void testStatic_Cast(){ // 基本類型的轉換 cout << "Begin of basic Type Cast--------------" << endl; char p = 'a'; cout << "p::" << p << endl; int i = static_cast<int>(p); cout << "i::" << i << endl; char q = static_cast<char>(i); cout << "q::" << q << endl; cout << "End of basic Type Cast--------------" << endl; // void*與別的指針類型之間的轉換 cout << "Begin of void* Type Cast--------------" << endl; int ii = 2; void* pvii = &ii; int* pii = static_cast<int*>(pvii); cout << ii << endl; cout << *pii << endl; cout << "End of void* Type Cast--------------" << endl; // 向上類型轉換(安全) cout << "Begin of Inherit Type Castcout--------------upcast" << endl; Child child2; Parent* parent2 = static_cast<Parent*>(&child2); parent2->sayHello(); parent2->setChildNum(2); cout << "Get Parent member::" << parent2->getChildNum() << endl; cout << "End of Inherit Type Castcout--------------upcast" << endl; // 向下類型轉換(不安全) cout << "Begin of Inherit Type Castcout--------------downcast" << endl; Parent parent1; Child* child1 = static_cast<Child*>(&parent1); /*child1->sayHello(); child1->sayDad(); child1->setChildNum(2); child1->setBrotherNum(3);*/ cout << "Get Parent member::" << child1->getChildNum() << endl; cout << "Get Child member::" << child1->getBrotherNum() << endl; cout << "End of Inherit Type Castcout--------------downcast" << endl;}

對于static_cast來講,對象指針的轉換,向上轉換是安全的,向下轉換則不安全。 運行上面的代碼,向下轉換的時候代碼可以執行,但執行完以后會報錯如下: 這里寫圖片描述


const_cast 這里寫圖片描述

#pragma onceclass ConstCastDemo{public: ConstCastDemo(void); ~ConstCastDemo(void); void setNum(int num); int getNum() const;private: int m_nNum;};#include "StdAfx.h"#include "ConstCastDemo.h"ConstCastDemo::ConstCastDemo(void) : m_nNum(0){}ConstCastDemo::~ConstCastDemo(void){}void ConstCastDemo::setNum(int num){ m_nNum = num;}int ConstCastDemo::getNum() const{ return m_nNum;}void testConst_Cast(){ const ConstCastDemo demo; cout << "Num from demo::" << demo.getNum() << endl; // 由于為const對象,所以不可執行非const成員方法 // demo.setNum(100); // 不可以直接進行對象的轉換(轉換后會成為另一個對象?) /*ConstCastDemo demo1 = const_cast<ConstCastDemo>(demo); demo1.setNum(100); cout << "Num from demo::" << demo.getNum() <<endl; cout << "Num from demo1::" << demo1.getNum() <<endl;*/ // 進行指針的轉換,脫去const ConstCastDemo* demo2 = const_cast<ConstCastDemo*>(&demo); demo2->setNum(200); cout << "Num from demo::" << demo.getNum() << endl; cout << "Num from demo2::" << demo2->getNum() << endl; // 進行引用的轉換,脫去const ConstCastDemo& demo3 = const_cast<ConstCastDemo&>(demo); demo3.setNum(300); cout << "Num from demo::" << demo.getNum() << endl; cout << "Num from demo3::" << demo3.getNum() << endl;}

dynamic_cast 這里寫圖片描述

#pragma onceclass Parent{public: Parent(void); virtual ~Parent(void); void sayHello(); void setChildNum(int num); int getChildNum();private: int m_nChildNum;};#include "StdAfx.h"#include "Parent.h"#include <iostream>using namespace std;Parent::Parent(void){}Parent::~Parent(void){}void Parent::sayHello(){ cout << "Parent::say::" << "hello, boy!" << endl;}void Parent::setChildNum(int num){ m_nChildNum = num;}int Parent::getChildNum(){ return m_nChildNum;}#include "Parent.h"#pragma onceclass Child : public Parent{public: Child(void); virtual ~Child(void); void sayDad(); void setBrotherNum(int num); int getBrotherNum();private: int m_nBrotherNum;};#include <iostream>using namespace std;Child::Child(void) : Parent(){}Child::~Child(void){}void Child::sayDad(){ cout << "Child::say::" << "Hello, dad!" << endl;}void Child::setBrotherNum(int num){ m_nBrotherNum = num;}int Child::getBrotherNum(){ return m_nBrotherNum;}void testDynamic_Cast(){ /* ①dynamic_cast作用于類指針或者類引用; ②dynamic_cast用于向上轉換或者向下轉換; ③指針轉換的時候,如果失敗,返回NULL指針; ④引用轉換的時候,如果失敗,則跑出bad_cast異常; */ cout << "Begin to test dynamic_cast--------------Parent to Child" << endl; Parent* parent1 = new Parent(); Child* child1 = dynamic_cast<Child*>(parent1); if (child1 == NULL) { cout << "pointer dynamic_cast downcast failed!" << endl; } else { cout << "pointer dynamic_cast downcast succeed!" << endl; } /*Child& child2 = dynamic_cast<Child&>(*parent1);*/ Parent& parent2 = *parent1; try { Child& child2 = dynamic_cast<Child&>(parent2); cout << "reference dynamic_cast downcast succeed!" << endl; } catch (...) { cout << "reference dynamic_cast throw exception!" << endl; } cout << "End of test dynamic_cast--------------Parent to Child" << endl; cout << "Begin to test dynamic_cast--------------Child to Parent" << endl; Child* child3 = new Child(); Parent* parent3 = dynamic_cast<Parent*>(child3); if (parent3 == NULL) { cout << "pointer dynamic_cast upcast failed!" << endl; } else { cout << "pointer dynamic_cast upcast succeed!" << endl; } Child& child4 = *child3; try { Parent& parent4 = dynamic_cast<Parent&>(child4); cout << "reference dynamic_cast upcast succeed!" << endl; } catch (...) { cout << "reference dynamic_cast throw exception!" << endl; } cout << "End of test dynamic_cast--------------Child to Parent" << endl;}

reinpreter_cast 這里寫圖片描述

謹慎使用reinpreter_cast?。。?!


上一篇:C++ 工具

下一篇:C++異常處理機制

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合久久悠悠| 国产一区二区三区三区在线观看| 欧美激情精品久久久久久变态| 久久久人成影片一区二区三区| 91久久精品国产91久久性色| 国产成人精品日本亚洲| 亚洲jizzjizz日本少妇| 亚洲自拍高清视频网站| 亚洲福利精品在线| 黄色91在线观看| 国产亚洲一区二区精品| 91精品久久久久| 成人性生交大片免费看视频直播| 国产精品中文久久久久久久| 555www成人网| 搡老女人一区二区三区视频tv| 国产日韩欧美在线播放| 国产精品美腿一区在线看| 欧美激情按摩在线| 日韩欧美一区二区在线| 久久精品国产精品| 亚洲国语精品自产拍在线观看| 日韩电影大全免费观看2023年上| 亚洲成人a**站| 久久久久这里只有精品| 国产精品久久在线观看| 国语自产精品视频在线看抢先版图片| 精品国产欧美成人夜夜嗨| 亚洲午夜色婷婷在线| 国产亚洲xxx| 亚洲欧美另类自拍| 成人黄色短视频在线观看| 81精品国产乱码久久久久久| 亚洲人免费视频| 国产精品日韩欧美大师| 国内精品400部情侣激情| 亚洲欧美一区二区精品久久久| 91老司机在线| 国产玖玖精品视频| 国产91成人在在线播放| 亚洲专区在线视频| 91丨九色丨国产在线| 日韩欧美国产成人| 色偷偷88888欧美精品久久久| 亚洲亚裔videos黑人hd| 日本高清视频一区| 日韩综合中文字幕| 欧美大秀在线观看| 欧美性20hd另类| 91色视频在线观看| 欧美精品性视频| 成人黄色影片在线| 亚洲精品久久7777777| 国产精品视频专区| 亚洲男人第一网站| 亚洲一区二区三区久久| 日韩精品视频在线播放| 日韩精品极品视频免费观看| 日韩欧美在线视频免费观看| 国产福利精品av综合导导航| 日本精品性网站在线观看| 色偷偷偷亚洲综合网另类| 久久影视电视剧免费网站| 精品久久久久久久久久国产| 精品国产91久久久久久老师| 国产精品福利小视频| 国产精品自拍偷拍| 日韩精品中文在线观看| 日韩中文理论片| 久久99精品久久久久久噜噜| 国产精品久久久久久久久影视| 日韩精品丝袜在线| 久久久久久久国产| 国产精品三级网站| 亚洲大胆美女视频| 91九色视频导航| 亚洲性无码av在线| 久久91精品国产91久久久| 91在线观看欧美日韩| 国产a级全部精品| 欧美精品制服第一页| 日韩亚洲精品电影| 久久成人免费视频| 欧美大胆a视频| 庆余年2免费日韩剧观看大牛| 国产精品久久视频| 久久国内精品一国内精品| 亚洲精品视频免费在线观看| 国产精品一区二区三区久久久| 91久久国产综合久久91精品网站| 国外成人在线播放| 成人黄色片网站| 国产日韩欧美自拍| 91禁外国网站| 日本精品一区二区三区在线播放视频| 国产在线视频欧美| 国产一区二区三区在线观看视频| 精品偷拍各种wc美女嘘嘘| 91亚洲精品在线| 国产欧美精品在线播放| 国产999精品久久久| 国产精品都在这里| 日本亚洲欧洲色α| 97在线免费观看视频| 国内精品小视频| 亚洲2020天天堂在线观看| 55夜色66夜色国产精品视频| 51精品国产黑色丝袜高跟鞋| 亚洲欧美在线磁力| 日韩电影中文字幕| 亚洲图片欧洲图片av| 中文字幕在线视频日韩| 中文字幕精品av| 亚洲国产日韩欧美综合久久| 欧美性高潮床叫视频| 国产精品美女主播在线观看纯欲| 国产精品一久久香蕉国产线看观看| 久久久亚洲成人| 久久久精品久久久久| 91国产视频在线| 国内精品在线一区| 久久精品国产亚洲精品| 国产精品ⅴa在线观看h| 亚洲欧美综合v| 欧美极品xxxx| 亚洲精品美女视频| 国产欧美日韩免费看aⅴ视频| 国产成人97精品免费看片| 国产精品久久久久久久电影| 欧美日韩一区二区三区在线免费观看| 精品日韩中文字幕| 国产成人高清激情视频在线观看| 精品亚洲国产视频| 国产在线观看精品一区二区三区| 亚洲精品久久久久久下一站| 欧美性视频精品| 伊人久久综合97精品| 久久久久久亚洲精品不卡| 国产精品三级在线| 欧美成年人视频网站欧美| 国产精品久久久久久久久久久不卡| 久青草国产97香蕉在线视频| 亚洲高清色综合| 日韩电影免费在线观看| 国产91精品不卡视频| 欧美一级视频在线观看| 国产97在线观看| 大桥未久av一区二区三区| 国产成人精品视频| 亚洲福利视频网| 久久久久久欧美| 亚洲精品短视频| 亚洲国产精品va在线观看黑人| 亚洲韩国欧洲国产日产av| 国产精品久久久亚洲| 少妇高潮 亚洲精品| 日韩少妇与小伙激情| 欧美在线免费观看| 亚洲跨种族黑人xxx| 日韩在线资源网| 色偷偷亚洲男人天堂| 亚洲级视频在线观看免费1级| 欧美性猛交xxxx偷拍洗澡| 成人h片在线播放免费网站|