国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C++ 類型轉換

2019-11-17 05:27:16
字體:
來源:轉載
供稿:網友

  類型轉換是將一種類型的值映射為另一種類型的值。類型轉換實際上包含有自動隱含和強制的兩種。

  類型的自動隱式轉換

  C++語言編譯系統提供的內部數據類型的自動隱式轉換規則如下:

  1. 程序在執行算術運算時,低類型可以轉換為高類型。

  2. 在賦值表達式中,右邊表達式的值自動隱式轉換為左邊變量的類型,并賦值給它。

  3. 當在函數調用時,將實參值賦給形參,系統隱式地將實參轉換為形參的類型后,賦給形參。

  4. 函數有返回值時,系統將自動地將返回表達式類型轉換為函數類型后,賦值給調用函數。

  在以上情況下,系統會進行隱式轉換的。當在程序中發現兩個數據類型不相容時,又不能自動完成隱式轉換,則將出現編譯錯誤。例如:

   int * p = 100;

  在這種情況下,編譯程序將報錯,為了消除錯誤,可以進行如下所示的強制類型轉換:

   int * p = (int *)100;

  將整型數100顯式地轉換成指針類型。

  構造函數具有類型轉換功能

  在實際應用中,當類定義中提供了單個參數的構造函數時,該類便提供了一種將其他數據類型的數值或變量轉換為用戶所定義數據類型的方法。因此,可以說單個參數的構造函數提供了數據轉換的功能。下面通過一個例子進一步說明單參數構造函數的類型轉換功能。

#include
class A
{
public:
A() { m=0; }
A(double i) { m=i; }
void PRint() { cout< private:
double m;
};

void main()
{
A a(5);
a=10; file://a與10是不同的數據類型
a.print();
}
 
  程序的輸出結果為:

  10

  在該程序中,賦值語句a=10;中,賦值號兩邊數值10和對象a是兩上不相容的數據類型,可是它卻能順利通過編譯程序,并且輸出顯示正確結果,其主要原因是得益于單參數的構造函數。編譯系統選通過標準數據類型轉換,將整型數值10轉換成double型,然后,再通過類中定義的單參數構造函數將double型數值轉換為A類類型,最后把它賦值給a。這些轉換都是自動隱式完成的。
  轉換函數

  轉換函數又稱類型強制轉換成員函數,它是類中的一個非靜態成員函數。它的定義格式如下:

   class <類型說明符1>
    {
     public:
      Operator <類型說明符2>();
      …
    }

  這個轉換函數定義了由<類型說明符1>到<類型說明符2>之間的映射關系。可見,轉換函數是用來將一種類型的數據轉換成為另一種類型。下面通過一個例子說明轉換函數的功能。

#include

class Rational
{
public:
Rational(int d, int n)
{
den = d;
num = n;
}
operator double(); file://類型轉換函數
private:
int den, num;
};

Rational::operator double()
{
return double(den)/double(num);
}

void main()
{
Rational r(5, 8);
double d = 4.7;
d+=r;
cout< }

  程序輸出結果:

   5.325

  由程序可知,d是一個double型數值,r是Rational類的對象,這兩個不同類型的數據進行加法之所以能夠進行是得益于轉換函數operator double()。為使上述加法能夠進行,編譯系統先檢查類Rational的說明,看是否存在在下轉換函數能夠將Rational類型的操作數轉換為double類型的操作數。由于Rational類中說明了轉換函數operator double(),它可以在程序運行時進行上述類型轉換,因此,該程序中實現了d+=r;的操作。

  定義轉換函數時應注重如下幾點:

  (1) 轉換函數是用戶定義的成員函數,但它要是非靜態的。

  (2) 轉換函數不可以有返回值。

  (3) 轉換函數也不帶任何參數。

  (4) 轉換函數函數還不能定義為友元函數。

  轉換函數的名稱是類型轉換的目標類型,因此,不必再為它指定返回值類型;轉換函數是被用于本類型的數值或變量轉換為其他的類型,也不必帶參數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 冀州市| 封开县| 岳阳市| 中卫市| 巴林左旗| 武陟县| 茶陵县| 深州市| 南开区| 河间市| 新郑市| 手游| 大港区| 临沧市| 宜州市| 德格县| 万源市| 中方县| 平邑县| 莱西市| 当阳市| 扎鲁特旗| 文山县| 弥渡县| 洞头县| 泽普县| 苏州市| 嘉禾县| 万盛区| 砚山县| 广东省| 德安县| 冕宁县| 碌曲县| 普安县| 张北县| 永丰县| 旬阳县| 开鲁县| 四川省| 米泉市|