亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中常用的四種類型轉換方式是什么

發布時間:2022-08-26 15:02:55 來源:億速云 閱讀:115 作者:iii 欄目:開發技術

本篇內容介紹了“C++中常用的四種類型轉換方式是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.靜態類型轉換:static_cast(exp)

1.1靜態類型轉換主要用于兩種轉換環境

1.1.1 C++內置類型的轉換:與C風格強轉類似。

與c相同的地方:

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

不同的地方就是使用static_cast不能強轉內置類型指針的,這點可以避免C風格中的越界問題。

如圖所示:

C++中常用的四種類型轉換方式是什么

1.1.2當有繼承關系存在時的強轉:

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

#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;
}

結果圖:

C++中常用的四種類型轉換方式是什么

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

如果使用static_cast 由父類向子類轉型,向下轉型,是不安全。

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

不安全的情況介紹:

#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;
}

結果圖:

C++中常用的四種類型轉換方式是什么

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

安全的情況:

#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;
}

結果圖:

C++中常用的四種類型轉換方式是什么

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

2.動態類型轉換:dynamic_cast(exp)

2.1概念

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

注意使用的條件為:1)要有繼承關系 2)要有虛函數。

這個虛表的結構:

C++中常用的四種類型轉換方式是什么

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;
}

結果圖:

C++中常用的四種類型轉換方式是什么

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

就是用來修改const修飾的常引用和常指針的轉換方式

3.1代碼說明

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

結果圖:

C++中常用的四種類型轉換方式是什么

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

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

4.1概念

這要類型轉換方式,是可以慶用于任何類型,他的底層的實現就是對底層二進制數據的一個拷貝。所以也是一個不安全的強轉。

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

當我們想把一個數的地址,用10進制的表達出來的時候,如下,光一個int 是裝不下地址的十進制,所以系統就會給我們報錯。

C++中常用的四種類型轉換方式是什么

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

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

結果圖:

C++中常用的四種類型轉換方式是什么

“C++中常用的四種類型轉換方式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

台安县| 偃师市| 仁怀市| 西乌珠穆沁旗| 滦南县| 开鲁县| 奉新县| 大港区| 辉县市| 斗六市| 沂水县| 长子县| 栾川县| 宁强县| 鲜城| 黑山县| 会同县| 柞水县| 平谷区| 景宁| 石泉县| 大邑县| 卫辉市| 麻城市| 乐平市| 高邮市| 通化市| 建湖县| 灵丘县| 永济市| 永川市| 武陟县| 秦安县| 兰溪市| 曲靖市| 阳城县| 金沙县| 英吉沙县| 桑植县| 苗栗市| 民权县|