最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++中常用的四種類型轉(zhuǎn)換方式

 更新時間:2022年08月18日 17:02:04   作者:lhb2998658795  
這篇文章主要為大家詳細(xì)介紹了C++中常用的四種類型轉(zhuǎn)換方式:static_cast<Type>、dynamic_cast<Type>、const_case<Type>和reinterpret_cast,感興趣的可以了解一下

1.靜態(tài)類型轉(zhuǎn)換:static_cast(exp)

1.1靜態(tài)類型轉(zhuǎn)換主要用于兩種轉(zhuǎn)換環(huán)境

1.1.1 C++內(nèi)置類型的轉(zhuǎn)換:與C風(fēng)格強(qiáng)轉(zhuǎn)類似。

與c相同的地方:

#include <iostream>
 
using namespace std;
 
int main()
{
    double a=3.14;
 
    cout << static_cast<int>(a) << endl;
 
    return 0;
}

不同的地方就是使用static_cast不能強(qiáng)轉(zhuǎn)內(nèi)置類型指針的,這點可以避免C風(fēng)格中的越界問題。

如圖所示:

1.1.2當(dāng)有繼承關(guān)系存在時的強(qiáng)轉(zhuǎn):

如果使用static_cast 由子類向父類轉(zhuǎn)型,向上轉(zhuǎn)型,天然安全安全。(應(yīng)為子類的空間肯定比父類的空間大,子類是在繼承父類的空間上面開辟),代碼如下:

#include <iostream>
 
using namespace std;
 
class A
{
public:
    int a=100;
 
    void Ashow_info()
    {
        cout<<this->a<<endl;
    }
};
 
class B:public A
{
public:
    int a=200;
    int b=300;
    int c=400;
    void Bshow_info()
    {
        cout<<this->a<<this->b<<this->c<<endl;
    }
};
 
 
int main()
{
   B* a=new B;
   static_cast<A*>(a)->Ashow_info();
 
    return 0;
}

結(jié)果圖:

我們可以通過子類安全的訪問到父類中的a值。

如果使用static_cast 由父類向子類轉(zhuǎn)型,向下轉(zhuǎn)型,是不安全。

那么何時不安全?何時安全?

不安全的情況介紹:

#include <iostream>
 
using namespace std;
 
class A
{
public:
    int a=100;
 
    void Ashow_info()
    {
        cout<<this->a<<endl;
    }
};
 
class B:public A
{
public:
    int a=200;
    int b=300;
    int c=400;
    void Bshow_info()
    {
        cout<<this->a<<this->b<<this->c<<endl;
    }
};
 
 
int main()
{
   A* a=new A;
   static_cast<B*>(a)->Bshow_info();
 
    return 0;
}

結(jié)果圖:

如圖所示結(jié)果中并沒有出現(xiàn)本應(yīng)該打出的200,300,400,這就是不知道子類空間是否被開辟而向下訪問造成的結(jié)果。

安全的情況:

#include <iostream>
 
using namespace std;
 
class A
{
public:
    int a=100;
 
    void Ashow_info()
    {
        cout<<this->a<<endl;
    }
};
 
class B:public A
{
public:
    int a=200;
    int b=300;
    int c=400;
    void Bshow_info()
    {
        cout<<this->a<<this->b<<this->c<<endl;
    }
};
 
 
int main()
{
   A* a=new B;
   static_cast<B*>(a)->Bshow_info();
 
    return 0;
}

結(jié)果圖:

如圖所示,此時我們可以打出200,300,400,等數(shù)值,說明當(dāng)我們知道子類空間被開辟時候,就可以安全的向下訪問。

2.動態(tài)類型轉(zhuǎn)換:dynamic_cast(exp)

2.1概念

動態(tài)類型轉(zhuǎn)換是依賴于虛函數(shù)的與繼承關(guān)系,沒有虛函數(shù),就無法使用動態(tài)類型轉(zhuǎn)換。dynamic_cast是一個安全類型轉(zhuǎn)換,因為他是依賴于函數(shù)實現(xiàn)動態(tài)轉(zhuǎn)型。因為虛表中的第一個Slot位置保存了類型運行識別信息。

注意使用的條件為:1)要有繼承關(guān)系 2)要有虛函數(shù)。

這個虛表的結(jié)構(gòu):

2.2代碼舉例說明

#include <iostream>
 
using namespace std;
 
class A
{
public:
 
 
    virtual void show_info()
    {
        cout<<"我是父親"<<endl;
    }
};
 
class B:public A
{
public:
 
    void show_info()
    {
        cout<<"我是兒子"<<endl;
    }
};
 
 
int main()
{
   A* a=new B;
   dynamic_cast<B*>(a)->show_info();
 
    return 0;
}

結(jié)果圖:

3.常類型轉(zhuǎn)換:const_case(exp)

就是用來修改const修飾的常引用和常指針的轉(zhuǎn)換方式

3.1代碼說明

#include <iostream>
 
using namespace std;
 
int main()
{
    const int& a=100;
 
    const_cast<int&>(a)=200;
 
    cout<<a<<endl;
 
 
    return 0;
}

結(jié)果圖:

由圖可知我們修改了常引用的數(shù)值。

4. 解釋類型轉(zhuǎn)換: reinterpret_cast(exp)

4.1概念

這要類型轉(zhuǎn)換方式,是可以慶用于任何類型,他的底層的實現(xiàn)就是對底層二進(jìn)制數(shù)據(jù)的一個拷貝。所以也是一個不安全的強(qiáng)轉(zhuǎn)。

4.2由于這個一般都不用,從我們最有可能的會用到的情況下抽出來一種,代碼如下:

當(dāng)我們想把一個數(shù)的地址,用10進(jìn)制的表達(dá)出來的時候,如下,光一個int 是裝不下地址的十進(jìn)制,所以系統(tǒng)就會給我們報錯。

 這個時候reinterpert_cast就起到了作用,我們可以把他轉(zhuǎn)為long long類型,如下:

#include <iostream>
 
using namespace std;
 
int main()
{
  int a=10;
 
  int *p=&a;
 
 
  cout<<reinterpret_cast<long long>(p)<<endl;
    return 0;
}

結(jié)果圖:

到此這篇關(guān)于詳解C++中常用的四種類型轉(zhuǎn)換方式的文章就介紹到這了,更多相關(guān)C++類型轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何用c語言完成俄羅斯方塊小游戲

    如何用c語言完成俄羅斯方塊小游戲

    這篇文章主要介紹了如何使用C語言開發(fā)一個簡單的俄羅斯方塊游戲,涵蓋了游戲設(shè)計、數(shù)據(jù)結(jié)構(gòu)、核心邏輯和實現(xiàn)步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • Qt常用容器類的使用

    Qt常用容器類的使用

    本文主要介紹了Qt常用容器類的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C/C++ 數(shù)組和指針及引用的區(qū)別

    C/C++ 數(shù)組和指針及引用的區(qū)別

    這篇文章主要介紹了C/C++ 數(shù)組和指針及引用的區(qū)別的相關(guān)資料,這里從匯編的角度來分析他們之間的區(qū)別,需要的朋友可以參考下
    2017-07-07
  • 最新clion2020激活碼附安裝教程(親測有效)

    最新clion2020激活碼附安裝教程(親測有效)

    這篇文章主要介紹了最新clion2020激活碼附安裝教程(親測有效),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Qt實現(xiàn)發(fā)送HTTP請求的示例詳解

    Qt實現(xiàn)發(fā)送HTTP請求的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何通過Qt實現(xiàn)發(fā)送HTTP請求,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用

    Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用

    本文主要介紹了Qt中關(guān)聯(lián)容器QMap,QMultiMap,QHash,QMultiHash的使用,這些關(guān)聯(lián)容器在Qt中提供了靈活而強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)選項,根據(jù)具體的需求和使用場景,您可以選擇適合的容器來存儲和管理數(shù)據(jù),感興趣的可以了解一下
    2023-09-09
  • C語言基礎(chǔ)野指針與空指針示例分析

    C語言基礎(chǔ)野指針與空指針示例分析

    全網(wǎng)最接地氣的C語言野指針介紹,此處對于野指針與空指針知識點做一些簡要的介紹,作者實屬初學(xué),難免文章中有內(nèi)容理解不到位或者有不當(dāng)之處,還請朋友們不吝指正,希望大家多多給予支持
    2021-11-11
  • C語言預(yù)處理詳解

    C語言預(yù)處理詳解

    這篇文章主要給大家介紹了關(guān)于C語言之預(yù)處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • c語言生成隨機(jī)uuid編碼示例

    c語言生成隨機(jī)uuid編碼示例

    這篇文章主要介紹了c語言生成隨機(jī)uuid編碼示例,需要的朋友可以參考下
    2014-05-05
  • C++實現(xiàn)stack與queue數(shù)據(jù)結(jié)構(gòu)的模擬

    C++實現(xiàn)stack與queue數(shù)據(jù)結(jié)構(gòu)的模擬

    stack是一種容器適配器,專門用在具有后進(jìn)先出操作的上下文環(huán)境中,其刪除只能從容器的一端進(jìn)行 元素的插入與提取操作;隊列是一種容器適配器,專門用于在FIFO上下文(先進(jìn)先出)中操作,其中從容器一端插入元素,另一端提取元素
    2023-04-04

最新評論

郴州市| 天津市| 合阳县| 五常市| 建阳市| 宝丰县| 宿州市| 溧阳市| 西青区| 福海县| 南木林县| 孟津县| 嘉祥县| 离岛区| 屏东县| 江北区| 云安县| 勃利县| 黑山县| 军事| 大关县| 南康市| 赤峰市| 禄丰县| 雷州市| 密云县| 洛扎县| 通榆县| 城口县| 大庆市| 封开县| 苗栗县| 肥东县| 永登县| 武汉市| 渭南市| 维西| 邵东县| 三原县| 临汾市| 蒙城县|