• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

            dynamic

            更新時間:2023-03-01 18:02:10 閱讀: 評論:0

            dynamic_cast是四個強制類型轉換操作符中最特殊的一個,它支持運行時識別指針或引用。

            >>>>>>>>>>>編譯器的RTTI設置>>>>>>>>>>>

            dynamic_cast提供RTTI(Run-Time Type Information),也就是運行時類型識別。它對編譯器有要求,需要編譯器啟動“運行時類型信息”這一選項。當編譯器不開啟RTTI時,運行含有dynamic_cast操作符的程序時會出現一個警告:

            warning C4541: “dynamic_cast”用在了帶 /GR- 的多態類型“ANIMAL”上;可能導致不可預知的行為

            VS2010在默認下是開啟RTTI的,也可以自己手動去開啟或者關閉,操作如下:

            視圖->解決方案資源管理器

            在打開的解決方案管理器中,對著項目名稱右擊,選擇屬性

            配置屬性-〉C/C++

            >>>>>>>>>>>>>步入正題>>>>>>>>>>>>>

            dynamic_cast主要用于“安全地向下轉型”

            dynamic_cast用于類繼承層次間的指針或引用轉換。主要還是用于執行“安全的向下轉型(safe downcasting)”,也即是基類對象的指針或引用轉換為同一繼承層次的其他指針或引用。至于“先上轉型”(即派生類指針或引用類型轉換為其基類類型),本身就是安全的,盡管可以使用dynamic_cast進行轉換,但這是沒必要的, 普通的轉換已經可以達到目的,畢竟使用dynamic_cast是需要開銷的。

            class Ba{public: Ba(){}; virtual void Show(){cout<<"This is Ba calss";}};class Derived:public Ba{public: Derived(){}; void Show(){cout<<"This is Derived class";}};int main(){ Ba *ba ; Derived *der = new Derived; //ba = dynamic_cast<Ba*>(der); //正確,但不必要。 ba = der; //先上轉換總是安全的 ba->Show(); system("pau");} 學習交流群:894479708 歡迎所有初學和進階者一起討論學習! dynamic_cast與繼承層次的指針

            對于“向下轉型”有兩種情況。一種是基類指針所指對象是派生類類型的,這種轉換是安全的;另一種是基類指針所指對象為基類類型,在這種情況下dynamic_cast在運行時做檢查,轉換失敗,返回結果為0;

            #include "stdafx.h"#include<iostream>using namespace std;class Ba{public: Ba(){}; virtual void Show(){cout<<"This is Ba calss";}};class Derived:public Ba{public: Derived(){}; void Show(){cout<<"This is Derived class";}};int main(){ //這是第一種情況 Ba* ba = new Derived; if(Derived *der= dynamic_cast<Derived*>(ba)) { cout<<"第一種情況轉換成功"<<endl; der->Show(); cout<<endl; } //這是第二種情況 Ba * ba1 = new Ba; if(Derived *der1 = dynamic_cast<Derived*>(ba1)) { cout<<"第二種情況轉換成功"<<endl; der1->Show(); } el { cout<<"第二種情況轉換失敗"<<endl; } 學習交流群:894479708 歡迎所有初學和進階者一起討論學習! delete(ba); delete(ba1); system("pau");}

            運行結果:

                  

            dynamic_cast和引用類型

            在前面的例子中,使用了dynamic_cast將基類指針轉換為派生類指針,也可以使用dynamic_cast將基類引用轉換為派生類引用。

            同樣的,引用的向上轉換總是安全的:

            Derived c; Derived & der2= c; Ba & ba2= dynamic_cast<Ba&>(der2);//向上轉換,安全 ba2.Show();

            所以,在引用上,dynamic_cast依舊是常用于“安全的向下轉型”。與指針一樣,引用的向下轉型也可以分為兩種情況,與指針不同的是,并不存在空引用,所以引用的dynamic_cast檢測失敗時會拋出一個bad_cast異常:

            int main(){ //第一種情況,轉換成功 Derived b ; Ba &ba1= b; Derived &der1 = dynamic_cast<Derived&>(ba1); cout<<"第一種情況:"; der1.Show(); cout<<endl; //第二種情況 Ba a ; Ba &ba = a ; cout<<"第二種情況:"; try{ Derived & der = dynamic_cast<Derived&>(ba); } catch(bad_cast) 學習交流群:894479708 歡迎所有初學和進階者一起討論學習! { cout<<"轉化失敗,拋出bad_cast異常"<<endl; } system("pau");}

            運行結果:

            使用dynamic_cast轉換的Ba類至少帶有一個虛函數

            當一個類中擁有至少一個虛函數的時候,編譯器會為該類構建出一個虛函數表(virtual method table),虛函數表記錄了虛函數的地址。如果該類派生了其他子類,且子類定義并實現了基類的虛函數,那么虛函數表會將該函數指向新的地址。虛表是C++多態實現的一個重要手段,也是dynamic_cast操作符轉換能夠進行的前提條件。當類沒有虛函數表的時候(也即一個虛函數都沒有定義),dynamic_cast無法使用RTTI,不能通過編譯(個人猜想...有待驗證)。

              當然,虛函數表的建立對效率是有一定影響的,構建虛函數表、由表查詢函數 都需要時間和空間上的消耗。所以,除了必須聲明virtual(對于一個多態基類而言),不要輕易使用virtual函數。對于虛函數的進一步了解,可以查看《Effective C++》

            獲取更多:關注我 看我主頁加入我們的學習大軍!

            更多筆記,資料,教程 >>>>>>>> 私信 “資料” 獲取

            本文發布于:2023-02-28 20:14:00,感謝您對本站的認可!

            本文鏈接:http://www.newhan.cn/zhishi/a/167766492982449.html

            版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。

            本文word下載地址:dynamic.doc

            本文 PDF 下載地址:dynamic.pdf

            下一篇:返回列表
            標簽:dynamic
            相關文章
            留言與評論(共有 0 條評論)
               
            驗證碼:
            推薦文章
            排行榜
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實用文體寫作網旗下知識大全大全欄目是一個全百科類寶庫! 優秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 久久无码字幕中文久久无码| 亚洲一区二区三区在线播放无码| 撕开奶罩揉吮奶头视频| 国产亚洲精品2021自在线| a级国产乱理伦片在线观看al| 亚洲人妻一区二区精品| 国产一级片内射在线视频| 亚洲欧美综合在线天堂| 国产亚洲欧洲综合5388| 久久热这里只有精品最新| 在线视频中文字幕二区| 国产精成A品人V在线播放| 二区中文字幕在线观看| 国产欧美日韩免费看AⅤ视频| 亚洲国产高清av网站| 亚洲欧美偷拍另类A∨| 中文字幕乱码一区二区三区免费| 日韩中文字幕亚洲精品| 欧美成人精品手机在线| 欧洲亚洲成av人片天堂网| 精品久久久无码中文字幕| 性做久久久久久久| 国产精品美女网站| 亚洲精品揄拍自拍首页一| 国产99在线 | 免费| 啊别插了视频高清在线观看 | 日韩免费码中文在线观看| 亚洲精品在线第一页| 中文字幕av国产精品| 日韩精品高清自在线| 中文字幕精品亚洲字幕成| 无码熟妇人妻av在线电影| 色综合天天综合天天更新| L日韩欧美看国产日韩欧美| 日韩中文字幕v亚洲中文字幕| 51午夜精品免费视频| 18禁无遮挡啪啪无码网站| 国产在线不卡精品网站| 亚洲男人第一av网站| 日韩V欧美V中文在线| 最近的中文字幕免费完整版|