青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++分析研究  
C++
日歷
<2013年2月>
272829303112
3456789
10111213141516
17181920212223
242526272812
3456789
統計
  • 隨筆 - 92
  • 文章 - 4
  • 評論 - 4
  • 引用 - 0

導航

常用鏈接

留言簿

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 

  但是從沒聽說過轉換構造函數,隱式轉換函數也是一樣,C++的確是夠博大精深的,再次嘆服!
  其實我們已經在C/C++中見到過多次標準類型數據間的轉換方式了,這種形式用于在程序中將一種指定的數據轉換成另一指定的類型,也即是強制轉換,比如:int a = int(1.23),其作用是將1.23轉換為整形1.然而對于用戶自定義的類類型,編譯系統并不知道如何進行轉換,所以需要定義專門的函數來告訴編譯系統改如何轉換,這就是轉換構造函數和類型轉換函數!
  一、轉換構造函數
  轉換構造函數(conversion constructor function) 的作用是將一個其他類型的數據轉換成一個類的對象?
  當一個構造函數只有一個參數,而且該參數又不是本類的const引用時,這種構造函數稱為轉換構造函數。
  轉換構造函數是對構造函數的重載。
  例如:
  [cpp]
  Complex(double r)
  {
  real=r;
  imag=0;
  }
  其作用是將double型的參數r轉換成Complex類的對象,將r作為復數的實部,虛部為0?用戶可以根據需要定義轉換構造函數,在函數體中告訴編譯系統怎樣去進行轉換?
  那么如何使用轉換構造函數進行類型轉換呢?我們看如下的例子:
  [cpp]
  // TypeSwitch.cpp : 定義控制臺應用程序的入口點。
  //
  #include "stdafx.h"
  #include <iostream>
  using namespace std;
  class Complex
  {
  public:
  Complex():real(0),imag(0){};
  Complex(double r, double i):real(r),imag(i){};
  Complex(double r):real(r),imag(0){}; // 定義轉換構造函數
  void Print(){
  cout《"real = " 《 real 《" image = "《imag《endl;
  }
  Complex& operator+(Complex c){
  return Complex(this->real + c.real, this->imag + c.imag);
  }
  private:
  double real;
  double imag;
  };
  int main(int argc, _TCHAR* argv[])
  {
  Complex c;
  c = 1.2; // 調用轉換構造函數將1.2轉換為Complex類型
  c.Print();
  Complex c1(2.9, 4.2);
  Complex c2 = c1 + 3.1; // 調用轉換構造函數將3.1轉換為Complex類型
  c2.Print();
  return 0;
  }

  不僅可以將一個標準類型數據轉換成類對象,也可以將另一個類的對象轉換成轉換構造函數所在的類對象?如可以將一個學生類對象轉換為教師類對象,可以在Teacher類中寫出下面的轉換構造函數:
  [cpp]
  Teacher(Student& s)
  {
  num=s.num;
  strcpy(name,s.name);
  sex=s.sex;
  }
  使用方法同上!
  注意:
  1.用轉換構造函數可以將一個指定類型的數據轉換為類的對象?但是不能反過來將一個類的對象轉換為一個其他類型的數據(例如將一個Complex類對象轉換成double類型數據)?
  2.如果不想讓轉換構造函數生效,也就是拒絕其它類型通過轉換構造函數轉換為本類型,可以在轉換構造函數前面加上explicit!例如sat答案
  [cpp]
  // TypeSwitch.cpp : 定義控制臺應用程序的入口點。
  //
  #include "stdafx.h"
  #include <iostream>
  using namespace std;
  class Complex
  {
  public:
  Complex():real(0),imag(0){};
  Complex(double r, double i):real(r),imag(i){};
  explicit Complex(double r):real(r),imag(0){}; // explicit禁止構造函數的轉換功能
  void Print(){
  cout《"real = " 《 real 《" image = "《imag《endl;
  }
  private:
  double real;
  double imag;
  };
  int main(int argc, _TCHAR* argv[])
  {
  Complex c1(1.2, 2.3), c2;
  double d;
  d = c1 + 1.1; // 調用類型轉換函數將c1轉換為double,編譯出錯!
  cout《d《endl;
  return 0;
  }
  二、類型轉換函數
  用轉換構造函數可以將一個指定類型的數據轉換為類的對象?但是不能反過來將一個類的對象轉換為一個其他類型的數據(例如將一個Complex類對象轉換成double類型數據)?而類型轉換函數就是專門用來解決這個問題的!
  類型轉換函數的作用是將一個類的對象轉換成另一類型的數據?
  如果已聲明了一個Complex類,可以在Complex類中這樣定義類型轉換函數:
  [cpp]
  operator double( )
  {
  return real;
  }
  類型轉換函數的一般形式為:
  operator 類型名( )
  {
  實現轉換的語句
  }

  注意事項:
  1.在函數名前面不能指定函數類型,函數沒有參數?
  2.其返回值的類型是由函數名中指定的類型名來確定的?
  3.類型轉換函數只能作為成員函數,因為轉換的主體是本類的對象,不能作為友元函數或普通函數?
  4.從函數形式可以看到,它與運算符重載函數相似,都是用關鍵字operator開頭,只是被重載的是類型名?double類型經過重載后,除了原有的含義外,還獲得新的含義(將一個Complex類對象轉換為double類型數據,并指定了轉換方法)?這樣,編譯系統不僅能識別原有的double型數據,而且還會把Complex類對象作為double型數據處理托福答案
  [cpp]
  // TypeSwitch.cpp : 定義控制臺應用程序的入口點。
  //
  #include "stdafx.h"
  #include <iostream>
  using namespace std;
  class Complex
  {
  public:
  Complex():real(0),imag(0){};
  Complex(double r, double i):real(r),imag(i){};
  Complex(double r):real(r),imag(0){}; // 定義轉換構造函數
  void Print(){
  cout《"real = " 《 real 《" image = "《imag《endl;
  }
  operator double(){ // 定義類型轉換函數
  return real;
  }
  private:
  double real;
  double imag;
  };
  int main(int argc, _TCHAR* argv[])
  {
  Complex c1(1.2, 2.3);
  double d;
  d = c1 + 1.1; // 調用類型轉換函數將c1轉換為double
  cout《d《endl;
  return 0;
  }
  本例中,對于d = c1 + 1.1;先調用類型轉換函數將c1轉為double類型,然后在與1.1相加!
  那么程序中的Complex類對具有雙重身份,既是Complex類對象,又可作為double類型數據?Complex類對象只有在需要時才進行轉換,要根據表達式的上下文來決定?轉換構造函數和類型轉換運算符有一個共同的功能: 當需要的時候,編譯系統會自動調用這些函數,建立一個無名的臨時對象(或臨時變量)?

posted on 2013-12-01 20:20 HAOSOLA 閱讀(421) 評論(0)  編輯 收藏 引用
 
Copyright © HAOSOLA Powered by: 博客園 模板提供:滬江博客
PK10開獎 PK10開獎
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久久久一区二区三区| 国语自产精品视频在线看| 久久成人精品无人区| 亚洲激情中文1区| 老司机免费视频一区二区| 一区二区三欧美| 欧美激情一区二区三区成人| 亚洲欧美激情精品一区二区| 一本色道久久| 一本一本久久a久久精品牛牛影视| 夜夜嗨av一区二区三区| 亚洲欧美日韩精品久久奇米色影视| 欧美影视一区| 欧美顶级艳妇交换群宴| 欧美日韩在线精品一区二区三区| 国产精品久久久久久久久免费| 国产在线麻豆精品观看| 亚洲国产精品久久久久秋霞影院 | 一区二区欧美在线| 99日韩精品| 亚洲欧美影院| 美女亚洲精品| 99国产精品久久久久老师| 亚洲小说春色综合另类电影| 久久se精品一区精品二区| 欧美黄色片免费观看| 国产精品国码视频| 欧美一区二区三区久久精品茉莉花| 久久久久网址| 国产精品试看| 日韩视频中午一区| 久久精精品视频| 亚洲人在线视频| 久久精品99| 国产精品久久久久久久一区探花| 1000精品久久久久久久久| 亚洲欧美视频一区| 亚洲精品国精品久久99热一| 久久精品在线免费观看| 欧美日韩一区免费| 亚洲美女啪啪| 亚洲国产99精品国自产| 久久精品国产77777蜜臀 | 欧美成人一区在线| 国产深夜精品| 午夜亚洲性色视频| 亚洲私拍自拍| 欧美日韩视频在线一区二区观看视频 | 欧美丝袜一区二区| 亚洲欧洲日夜超级视频| 久久夜色精品国产欧美乱| 午夜视黄欧洲亚洲| 国产精品色一区二区三区| 亚洲与欧洲av电影| 亚洲视频在线看| 国产精品色网| 欧美在线视频不卡| 午夜在线a亚洲v天堂网2018| 国产精品羞羞答答xxdd| 亚洲欧美日韩国产综合在线| 99精品视频免费观看| 欧美日韩在线第一页| 亚洲视频你懂的| 在线一区二区三区四区五区| 国产精品成人免费| 亚洲欧美日韩一区二区在线| 亚洲视频中文字幕| 国产日韩精品在线播放| 久久九九电影| 久久久亚洲欧洲日产国码αv| 狠狠狠色丁香婷婷综合激情| 蘑菇福利视频一区播放| 蜜桃精品久久久久久久免费影院| 亚洲精品日产精品乱码不卡| 久久在线精品| 亚洲精品免费一二三区| 亚洲伦理在线观看| 欧美成人国产一区二区| 亚洲高清视频一区| 久久久一区二区| 久久精品女人天堂| 亚洲国产美女| 99re热精品| 国产精品狼人久久影院观看方式| 一区二区欧美日韩| 亚洲一区二区三区四区五区黄 | 在线一区二区视频| 欧美日韩亚洲天堂| 久久久蜜臀国产一区二区| 久久人人爽人人爽爽久久| 日韩视频一区二区三区在线播放| 亚洲卡通欧美制服中文| 欧美性猛交xxxx乱大交蜜桃| 久久精品导航| 欧美激情国产高清| 欧美中文在线视频| 欧美成人按摩| 欧美中文字幕在线| 欧美久久一区| 久久综合九色综合久99| 欧美精品久久一区二区| 久久av红桃一区二区小说| 免播放器亚洲一区| 午夜精品三级视频福利| 久久久久亚洲综合| 亚洲私人黄色宅男| 久久久夜精品| 亚洲视频在线观看| 香蕉免费一区二区三区在线观看| 亚洲国产日韩欧美一区二区三区| 日韩视频一区二区三区| 国产亚洲欧美日韩一区二区| 亚洲国产一区在线| 99亚洲伊人久久精品影院红桃| 狠狠v欧美v日韩v亚洲ⅴ| 99热免费精品| 91久久综合| 久久一综合视频| 欧美在线日韩精品| 欧美日韩免费在线| 欧美福利视频一区| 国产美女一区二区| 欧美激情小视频| 国产一区二区三区日韩欧美| 韩国精品久久久999| 一本大道久久a久久精二百| 亚洲电影激情视频网站| 亚洲在线免费观看| 欧美不卡在线视频| 亚洲国产婷婷香蕉久久久久久99| 亚洲在线观看免费| 亚洲一区二三| 欧美日韩亚洲一区三区| 亚洲日本va午夜在线电影| 亚洲大片免费看| 久久久久久国产精品一区| 久久成人在线| 国产一区二区三区奇米久涩| 午夜在线一区二区| 久久久久久久999精品视频| 国产欧美日韩精品专区| 亚洲欧美国产高清| 欧美中文在线字幕| 黑人一区二区三区四区五区| 久久精品国产亚洲aⅴ| 久久精品亚洲乱码伦伦中文| 国产精品夜夜夜| 香蕉久久夜色精品国产使用方法 | 欧美色综合网| 一区二区三区高清不卡| 亚洲永久字幕| 国产日韩欧美麻豆| 香港久久久电影| 久久精品二区三区| 一区三区视频| 欧美人与禽性xxxxx杂性| 亚洲肉体裸体xxxx137| 亚洲伊人第一页| 国产欧美日韩精品专区| 欧美伊人影院| 亚洲高清在线观看一区| 中国成人在线视频| 国产美女精品免费电影| 久久阴道视频| 亚洲精品视频在线观看网站| 午夜视频在线观看一区二区| 狠狠狠色丁香婷婷综合久久五月| 久久视频一区| 日韩视频免费观看高清完整版| 亚洲欧美第一页| 一区二区在线视频播放| 欧美日本一道本在线视频| 亚洲欧美激情精品一区二区| 欧美a级一区| 香蕉av福利精品导航| 亚洲福利视频三区| 亚洲一区二区三区免费观看 | 国产精品久久久一区二区| 欧美一级大片在线观看| 亚洲国产精品福利| 欧美一区二区性| 亚洲国产国产亚洲一二三| 欧美色123| 另类图片国产| 亚洲天堂免费在线观看视频| 久久午夜羞羞影院免费观看| 亚洲无人区一区| 亚洲国产精品99久久久久久久久| 久热成人在线视频| 99av国产精品欲麻豆| 狠狠色狠狠色综合日日五| 欧美体内she精视频在线观看| 久久久噜噜噜久久人人看| 久久综合色8888| 国产精品一区二区你懂得| 久久综合免费视频影院| 亚洲一区二区三区777| 亚洲国产精品女人久久久| 欧美一区综合| 亚洲天堂激情|