欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C++中四種類(lèi)型的轉(zhuǎn)換

 更新時(shí)間:2022年12月08日 10:41:39   作者:Hello_Bugs  
這篇文章主要是想和大家一起聊聊來(lái)C++中的四種類(lèi)型轉(zhuǎn)換?:const_cast、static_cast、reinterpret_cast和dynamic_cast,感興趣的可以了解一下

C語(yǔ)言中我們使用 int a=(int) b;的方式強(qiáng)制轉(zhuǎn)換

C++提供了四種類(lèi)型轉(zhuǎn)換方式

const_cast

把常量屬性去掉的一個(gè)轉(zhuǎn)換.

const  int a =10;
int *p1=(int *)(&a);//C 語(yǔ)言 OK
int *p2=const_cast<int *>(&a);//OK

???????double *p3 =(double *) (&a)//c 語(yǔ)言中可以,p3的尋址范圍變大,帶來(lái)風(fēng)險(xiǎn)

double  *p4=const_cast<double *>(&a);//c++在編譯階段就提示錯(cuò)誤

只用于去掉常量屬性的地方

int b=const_cast<int>(a);//NO ,ERROR const_carst<這里必須是指針或者引用>

static_cast

能夠提供編譯器認(rèn)為安全的類(lèi)型轉(zhuǎn)換

90%使用場(chǎng)景是這個(gè),這個(gè)用的是比較多的,幾乎能做任何類(lèi)型轉(zhuǎn)換,但是是要譯器認(rèn)為安全的類(lèi)型轉(zhuǎn)換

int a=10;
char b=static_cast<int>(a);//OK

int *p=nullptr;
short *b=static_cast<short *>(p) ;  //c++ NO , 兩者之間沒(méi)有任何聯(lián)系
double *b=static_cast<double *>(p) ;//C++ NO , 兩者之間沒(méi)有任何聯(lián)系
double *b1=(double *)(p) ;//C語(yǔ)言 OK 

基類(lèi)和派生類(lèi)之間可以使用 static_cast 

reinterpret_cast

int *p=nullptr;
short *b=reinterpret_cast<short *>(p) ;  //c++ OK ,
double *b=reinterpret_cast<double *>(p) ;//C++ OK , 
double *b1=(double *)(p) ;//C語(yǔ)言 OK 

類(lèi)似于C語(yǔ)言的強(qiáng)制類(lèi)型轉(zhuǎn)換

dynamic_cast

主要用著繼承結(jié)構(gòu)中,可以支持RTTI類(lèi)型識(shí)別的上下轉(zhuǎn)換

代碼

#include <iostream>
using namespace std;

class  A{

public:
    
    void virtual function(){
		
	cout<<"A function()"<<endl;
		
    }

};

class B : public A{

public:

    void virtual function(){	
	cout<<"B function()"<<endl;
		
   }
	
   void virtual test(){		
	cout<<"B function()"<<endl;
		
   }

};

class C : public A{

public:

    void virtual function(){
		
	cout<<"C function()"<<endl;
		
    }

};

class D : public A{

public:

    void virtual function(){		
	cout<<"D function()"<<endl;		
    }

};

void show(A * pa){
       //dynamic_cast 會(huì)檢查p指針是否指向的是一個(gè)B對(duì)象
       //pb->vfptr->vftable ->RTTI信息,如果dynamic_cast轉(zhuǎn)換成功
       //返回 指向B的地址,否則返回nullptr
       B  *pb =dynamic_cast<B *> pa;
       if(pb!=nullptr){
	    pb->test();
       }
       else{
	    pa->function();
       }
}


int main(){
   B b;
   C c;
   D d;
   show(&b);
   show(&c);
   show(&d);
   return 0; 
        
}

到此這篇關(guān)于詳解C++中四種類(lèi)型的轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)C++類(lèi)型轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或

相關(guān)文章

  • C++設(shè)計(jì)模式之狀態(tài)模式

    C++設(shè)計(jì)模式之狀態(tài)模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之狀態(tài)模式,本文講解了什么是狀態(tài)模式、狀態(tài)模式的使用場(chǎng)合、狀態(tài)模式的實(shí)現(xiàn)代碼等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C++初始化函數(shù)列表詳細(xì)解析

    C++初始化函數(shù)列表詳細(xì)解析

    C++可以定義引用類(lèi)型的成員變量,引用類(lèi)型的成員變量必須在構(gòu)造函數(shù)的初始化列表中進(jìn)行初始化
    2013-09-09
  • 使用c++11 constexpr時(shí)遇到的坑詳解

    使用c++11 constexpr時(shí)遇到的坑詳解

    c++11 constexpr將變量聲明為constexpr類(lèi)型以便由編譯器來(lái)驗(yàn)證變量是否是一個(gè)常量表達(dá)式,這篇文章主要給大家介紹了關(guān)于使用c++11 constexpr時(shí)遇到的坑,需要的朋友可以參考下
    2021-05-05
  • C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲(chǔ)的實(shí)例

    C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲(chǔ)的實(shí)例

    這篇文章主要介紹了C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲(chǔ)的實(shí)例的相關(guān)資料,M*N的矩陣,矩陣中有效值的個(gè)數(shù)遠(yuǎn)小于無(wú)效值的個(gè)數(shù),且這些數(shù)據(jù)的分布沒(méi)有規(guī)律,需要的朋友可以參考下
    2017-07-07
  • C++制作俄羅斯方塊

    C++制作俄羅斯方塊

    俄羅斯方塊寫(xiě)過(guò)好幾次了,每次的感覺(jué)都不一樣,都有新的收獲。就像達(dá)芬奇畫(huà)雞蛋一樣,雖然都是畫(huà)同樣的雞蛋,但是每次都有不同的收獲。&nbsp;
    2016-05-05
  • C++利用鏈表模板類(lèi)實(shí)現(xiàn)簡(jiǎn)易隊(duì)列

    C++利用鏈表模板類(lèi)實(shí)現(xiàn)簡(jiǎn)易隊(duì)列

    這篇文章主要為大家詳細(xì)介紹了C++利用鏈表模板類(lèi)實(shí)現(xiàn)一個(gè)簡(jiǎn)易隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C語(yǔ)言超全面define預(yù)處理指令的使用說(shuō)明

    C語(yǔ)言超全面define預(yù)處理指令的使用說(shuō)明

    C語(yǔ)言里可以用#define定義一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)常量。特點(diǎn)是:定義的標(biāo)識(shí)符不占內(nèi)存,只是一個(gè)臨時(shí)的符號(hào),預(yù)編譯后這個(gè)符號(hào)就不存在了,也不做類(lèi)型定義。預(yù)編譯又叫預(yù)處理
    2022-04-04
  • C語(yǔ)言堆與二叉樹(shù)的順序結(jié)構(gòu)與實(shí)現(xiàn)

    C語(yǔ)言堆與二叉樹(shù)的順序結(jié)構(gòu)與實(shí)現(xiàn)

    堆是計(jì)算機(jī)科學(xué)中一類(lèi)特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱(chēng),通常是一個(gè)可以被看做一棵完全二叉樹(shù)的數(shù)組對(duì)象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。本文將詳細(xì)介紹堆與二叉樹(shù)的順序結(jié)構(gòu)與實(shí)現(xiàn),需要的可以參考一下
    2022-05-05
  • 淺析C++11新特性的Lambda表達(dá)式

    淺析C++11新特性的Lambda表達(dá)式

    C++11 新增了很多特性,lambda 表達(dá)式是其中之一,本文涉及到C++11這次更新中較為重要的lambda表達(dá)式。有需要的朋友們可以參考學(xué)習(xí)。
    2016-08-08
  • c++隱式類(lèi)型轉(zhuǎn)換示例分享

    c++隱式類(lèi)型轉(zhuǎn)換示例分享

    這篇文章主要介紹了c++隱式類(lèi)型轉(zhuǎn)換的二個(gè)示例,需要的朋友可以參考下
    2014-03-03

最新評(píng)論