C++程序设计方法3:强制类型转换
生活随笔
收集整理的這篇文章主要介紹了
C++程序设计方法3:强制类型转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
強制類型轉換(顯示轉換)
dynamic_cast<Dst_Type>(Src_var)
Src_var必須是引用或者指針類型,Dst_Type類中含有虛函數,否則會有編譯錯誤;
若目標類與源類之間沒有繼承關系,則轉化失敗,返回空指針(注:失敗并不是運行崩潰)
?
static_cast<Dst_Type>(Src_var)
基類對象不能轉換為派生類對象,但基類指針可以轉換為派生類的指針
?
派生類對象(指針)可以轉化為基類的對象(指針)
沒有繼承關系的類之間,必須具有轉換途徑才能進行轉換(要么自定義,要么是語言語法支持)
#include <iostream> using namespace std;class B { public:virtual void f() {} };class D :public B {}; class E {};int main() {D d1;B b1;//d1 = static_cast<D> (b1);//error:從基類無法轉換回派生類b1 = static_cast<B>(d1);//b1 = dynamic_cast<B>(d1);//error:被轉化的必須是指針或者引用B* pb1 = new B();D* pd1 = static_cast<D*>(pb1);if (pd1)cout << "ok" << endl;//基類指針可以轉換為派生類的指針pd1 = dynamic_cast<D*>(pb1);if (pd1)cout << "ok" << endl;//基類不可以動態轉化為派生類 D* pd2 = new D();B* pb2 = static_cast<B*>(pd2);if (pb2)cout << "ok" << endl;//okpb2 = dynamic_cast<B*>(pd2);if (pb2)cout << "ok" << endl;//ok E* pe = dynamic_cast<E*>(pb1);if (!pe)cout << "ok" << endl;//ok//pe = static_cast<E*>(pb1);//error:沒有繼承關系不能轉換// E e = static_cast<E>(b1);//error:沒有提供轉換的途徑return 0; }?
轉載于:https://www.cnblogs.com/hujianglang/p/6654210.html
總結
以上是生活随笔為你收集整理的C++程序设计方法3:强制类型转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: loadrunner录制脚本,页面无法显
- 下一篇: JavaScript内存泄漏知多少?