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

C++分析研究  
C++
日歷
<2013年10月>
293012345
6789101112
13141516171819
20212223242526
272829303112
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 閱讀(423) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


 
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>
            亚洲高清久久网| 欧美~级网站不卡| 午夜精品久久久久久99热| 国产一区二区黄| 久久久久久高潮国产精品视| 欧美不卡视频| 久久国产精品久久久久久久久久| 久久久国产精品一区| 在线视频免费在线观看一区二区| 亚洲午夜久久久久久久久电影院| 1024成人网色www| 日韩视频在线观看一区二区| 国产在线拍偷自揄拍精品| 亚洲精品欧美激情| 激情六月综合| 亚洲免费视频网站| 一区二区三区日韩精品| 午夜影视日本亚洲欧洲精品| 亚洲久久视频| 久久视频一区二区| 久久国产乱子精品免费女 | 免费看的黄色欧美网站| 欧美激情视频免费观看| 久久久中精品2020中文| 国产精品久久久久影院亚瑟| 亚洲国产精品福利| 亚洲高清不卡一区| 亚洲视频在线观看| 一区二区免费看| 欧美成人高清视频| 男女精品网站| 伊大人香蕉综合8在线视| 午夜精品亚洲一区二区三区嫩草| 在线视频亚洲欧美| 你懂的视频一区二区| 亚洲大片在线观看| 一本色道久久综合亚洲精品不| 欧美精品日韩一本| 国产精品99久久99久久久二8| 亚洲欧美经典视频| 国产日韩欧美视频| 久久黄色网页| 欧美激情一区三区| 亚洲婷婷国产精品电影人久久| 国产精品久久久久久久app| 亚洲欧美一区二区三区久久| 久久精品夜色噜噜亚洲a∨| 韩日精品视频| 欧美黄色影院| 亚洲永久字幕| 免费观看久久久4p| 亚洲一区二区三区免费观看| 国产亚洲成av人片在线观看桃| 久久国产精彩视频| 亚洲欧洲在线一区| 午夜日韩视频| 亚洲国产成人久久| 欧美偷拍另类| 久久久精品日韩欧美| 亚洲黄色小视频| 欧美在线资源| 亚洲理论在线观看| 国产婷婷一区二区| 欧美激情小视频| 欧美一级网站| 午夜精品www| 欧美一区二区三区另类| 免费不卡亚洲欧美| 亚洲一区二区在线看| 久久久999精品免费| 国产精品永久在线| 亚洲人体一区| 欧美不卡在线| 久久亚洲电影| 欧美影院精品一区| 国产日韩欧美另类| 欧美国产三级| 欧美一级片一区| 亚洲精品久久久久久久久久久久久| 亚洲免费网站| 亚洲激情偷拍| 一区在线视频| 国产伦精品一区二区三| 欧美日韩国产色综合一二三四| 久久国产精品99精品国产| 亚洲视频精选在线| 亚洲高清久久网| 美女视频黄免费的久久| 欧美在线首页| 午夜精彩视频在线观看不卡| 9色精品在线| 亚洲欧洲另类| 亚洲第一毛片| 激情综合色丁香一区二区| 国产精品一香蕉国产线看观看| 欧美日韩精品免费观看视频| 免费在线一区二区| 久久久久五月天| 久久超碰97中文字幕| 亚洲欧美精品在线| 亚洲欧美日韩久久精品| 亚洲无线视频| 亚洲自拍偷拍麻豆| 亚洲特黄一级片| 亚洲一区免费| 午夜激情综合网| 午夜精品久久久久影视| 亚洲欧美欧美一区二区三区| 亚洲天堂男人| 亚洲自拍三区| 午夜视频一区二区| 欧美亚洲一区二区在线| 欧美一区午夜精品| 久久久久五月天| 毛片基地黄久久久久久天堂| 久久影院午夜论| 欧美jizzhd精品欧美巨大免费| 免费观看在线综合色| 欧美不卡视频一区| 欧美日韩aaaaa| 欧美视频一区在线| 国产精品社区| 韩国在线视频一区| 91久久精品一区二区三区| 亚洲免费观看高清完整版在线观看| 亚洲三级视频| 亚洲视频www| 欧美中文在线视频| 久久综合电影| 亚洲美女视频在线免费观看| 中文久久精品| 欧美在线视频一区二区| 免费不卡在线观看| 欧美色欧美亚洲另类七区| 国产精自产拍久久久久久| 国产一区二区精品丝袜| 亚洲国产精品久久91精品| 99精品国产在热久久| 亚洲欧美中日韩| 欧美xart系列高清| 99精品99久久久久久宅男| 亚洲欧美视频在线观看| 免费视频一区| 国产精品久久久一区麻豆最新章节| 国产欧美精品va在线观看| 在线国产亚洲欧美| 亚洲在线播放| 欧美大色视频| 亚洲欧美日韩天堂| 欧美大片18| 国产在线日韩| 中国亚洲黄色| 欧美mv日韩mv国产网站| 在线一区二区三区做爰视频网站| 久久福利资源站| 国产精品久久久对白| 亚洲第一精品影视| 久久爱91午夜羞羞| 91久久综合亚洲鲁鲁五月天| 亚洲欧美中文在线视频| 欧美精品九九99久久| 黑人巨大精品欧美一区二区小视频 | 欧美影院午夜播放| 亚洲激情欧美| 久久久成人网| 国产精品三区www17con| 亚洲裸体在线观看| 老司机精品久久| 午夜精品免费| 欧美午夜美女看片| 日韩亚洲精品电影| 欧美高清免费| 久久亚洲国产精品一区二区| 国产女主播在线一区二区| 一区二区三区精密机械公司 | 激情成人综合| 亚洲欧美中文日韩v在线观看| 亚洲激情在线播放| 久久免费视频网站| 韩国在线视频一区| 久久精品中文字幕一区| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美成人中文| 亚洲人成绝费网站色www| 暖暖成人免费视频| 久久人人97超碰国产公开结果| 国产午夜一区二区三区| 新狼窝色av性久久久久久| 亚洲视频在线观看视频| 欧美午夜激情视频| 亚洲欧美电影在线观看| 宅男在线国产精品| 国产精品国产三级欧美二区| 99精品视频免费观看| 亚洲免费激情| 欧美性色视频在线| 午夜精品久久久久久99热软件| 亚洲午夜精品久久| 国产精品一区在线观看你懂的| 欧美在线视频在线播放完整版免费观看|