日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基类和派生类中使用static_cast和dynamic_cast进行类型转换

發布時間:2025/7/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基类和派生类中使用static_cast和dynamic_cast进行类型转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

先看代碼:

#include <iostream>using namespace std;class A { public:A() {cout << "A" << endl;}virtual ~A() {cout << "~A" << endl;}virtual void print() {cout << "A::Print()" << endl;} };class B : public A { public:B(int i) : index(i) {cout << "B" << endl;}virtual ~B() {cout << "~B" << endl;}virtual void print() {cout << "B::Print(),index=" << index << endl;}int index; };int main(int argc, char *argv[]) {A* pA = new A();B* pB = new B(1);A* pAB = new B(5);B* pBA = static_cast<B*>(pA);B* pBB = static_cast<B*>(pB);B* pBAB = static_cast<B*>(pAB);if (pBA) {pBA->print();}if (pBB) {pBB->print();}if (pBAB) {pBAB->print();}delete pA;delete pB;return 0; }

執行結果:

A A B A B A::Print() B::Print(),index=1 B::Print(),index=5 ~A ~B ~A

pBB和pBAB沒有任何問題,其本身就是B對象。pBA是從基類轉換為B對象,但是調用的卻是A::Print(),因為pA對象并沒有構建B對象的內存,構建的僅是基類的內存,因此輸出基類的print()。

現在改動代碼,將A中的print函數去掉:

class A { public:A() {cout << "A" << endl;}virtual ~A() {cout << "~A" << endl;}/*virtual void print() {cout << "A::Print()" << endl;}*/ };

程序在A::print()處崩潰!因為基類已經沒有print()函數了。這里的pBA類型轉換是由基類構造的對象變為派生類的指針,隱藏一個嚴重的程序BUG,但是編譯器并沒有在這里給與任何提示,還轉換成功,得到了相應的B對象指針。

接下來使用dynamic_cast進行類型轉換:

B* pBA = dynamic_cast<B*>(pA);B* pBB = dynamic_cast<B*>(pB);B* pBAB = dynamic_cast<B*>(pAB);

程序調試結果,pBA轉換后為0,并沒有轉換成功,就可以在這里對轉換對象進行判斷。

因此在使用基本類型進行轉換時,用static_cast,在涉及到對象之間的轉換時用dynamic_cast。

float val = 10.00f;

int iVal = static_cast<int>(val);

A* pA = new B();

B* pB = dynamic_cast<B*>(pA);

if (pB != nullptr) {

? ? pB->dosomething();

}

轉載于:https://my.oschina.net/u/3489228/blog/1571524

總結

以上是生活随笔為你收集整理的基类和派生类中使用static_cast和dynamic_cast进行类型转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。