c++ 類型轉換


1、數據類型轉換(static_cast)

//數據類型轉換
printf("%d\n", static_cast<int>(10.2));

2、指針類型轉換(reinterpret_cast)
//指針類型轉換
  int *pint = new int(1);
  char *pch = reinterpret_cast<char *>(pint);

3、涉及到const的指針類型轉換(const_cast)
  const int num[5] = { 1,2,3,4,5 };
  const int *p = num;
  int *pint = const_cast<int *>(p);

4、子類轉化為父類(dynamic_cast)

class man
{
public:
    int name;
    //加上virtual關鍵字,可以使得父類用子類初始化后可以調用子類的函數
    virtual void run()
    {
        cout << "man is running" << endl;
    }
};

class son :public man
{
public:
    void run()
    {
        cout << "son is running" << endl;
    }
};

void main()
{
    /*man man1;
    son son1;
    man *p = &man1;
    p->run();
    p = &son1;
    p->run();*/
    man *pman = new man;
    son *pson = new son;
    //子類指針轉換為父類指針,但是還是調用子類的函數
    man *pfu = dynamic_cast<man *>(pson);
    pfu->run();
    system("pause");
}

 

    volatile關鍵字
  表示該變量易變,每次在訪問該關鍵字修飾的變量時都要讀內存,不對其進行優化。
  mutable關鍵字
  類的常成員函數在語義上是不允許修改類的成員變量的,但是有時候可能根據代碼的需要並不是這么絕對。那么就可以使用mutable聲明一個類的成員變量,它告訴編譯器類的常成員函數可以修改這個變量。
  explicit關鍵字
  修飾構造函數,通常用作 構造函數靜止隱式轉換。
  四種類型轉換
  1. const_cast
  去掉類型的const或volatile屬性。
    const int a=10;
    int &b=const_case<int&>(a);
 
  2. static_cast
  靜態類型轉換,用於類型間強制轉換。用於:
  (1)基類和子類轉換,子類指針轉父類是安全的,父類轉子類不安全。
  (2)基本數據類型轉換。
  (3)空指針轉換成目標類型指針。
  (4)轉換為void類型
    int n=1;
    double  d=static_cast<double>(n);
    int *pn=&n;
    double *d=static_cast<double*>(&n);
    void *p = static_case<void*>(pn);
  
  3.dynamic_cast
  動態類型轉換,運行時類型安全檢查(轉換失敗返回NULL)
  (1)安全基類和子類轉換,基類轉子類會失敗。
  (2)必須有虛函數。
  (3)相同基類不同子類間轉換,結果為NULL。
 
   4.reinterpret_cast
  重新解釋類型,沒有進行二進制轉換。
  一般用在函數指針類型之間轉換。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM