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

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>
            欧美不卡三区| 亚洲欧美日韩国产一区二区三区| 久久久美女艺术照精彩视频福利播放 | 亚洲激情视频在线播放| 美女视频网站黄色亚洲| 欧美成人dvd在线视频| 亚洲电影免费观看高清完整版| 欧美成人免费在线| 亚洲区第一页| 亚洲主播在线| 久久婷婷综合激情| 欧美精品三级在线观看| 国产精品国产三级国产普通话三级 | 亚洲欧洲av一区二区| 在线观看欧美黄色| 亚洲国产专区| 亚洲在线视频网站| 久久精品一区二区三区四区| 免费在线看一区| 99亚洲精品| 久久精品国产第一区二区三区最新章节 | 亚洲网友自拍| 亚洲伦理在线免费看| 亚洲天堂av图片| 亚洲成色www久久网站| 99精品视频免费全部在线| 欧美一级黄色录像| 欧美日韩高清在线观看| 国内精品国产成人| 亚洲一区日韩| 亚洲精品1区2区| 欧美专区在线| 国产精品久久久久久久久久妞妞| 黄色欧美成人| 欧美在线亚洲综合一区| 亚洲精品资源美女情侣酒店| 久久久久久久激情视频| 国产精品自拍小视频| 亚洲作爱视频| 亚洲国产精品久久久久婷婷884| 亚洲欧美国产一区二区三区| 欧美激情亚洲精品| 在线观看欧美日本| 久久免费精品视频| 性欧美8khd高清极品| 国产精品极品美女粉嫩高清在线 | 在线观看精品| 欧美成人高清| 亚洲国产婷婷香蕉久久久久久| 欧美中文日韩| 午夜精品区一区二区三| 国产精品日日摸夜夜摸av| 在线性视频日韩欧美| 亚洲精选中文字幕| 欧美日韩精品久久久| 日韩午夜精品| 日韩一级大片在线| 欧美日韩精品三区| 亚洲一级高清| 亚洲一区二区三区免费在线观看| 欧美日韩精品免费观看视一区二区 | 欧美好吊妞视频| 久久午夜视频| 欧美日本韩国| 亚洲狼人精品一区二区三区| 久久先锋影音| 亚洲国产精品激情在线观看| 老司机一区二区| 久久久久综合| 蜜桃av一区二区| 亚洲欧洲中文日韩久久av乱码| 免费看的黄色欧美网站| 久久青青草原一区二区| 亚洲国产高潮在线观看| 欧美国产成人精品| 欧美高清不卡| 中文精品一区二区三区| 一区二区三区四区国产| 国产精品中文字幕在线观看| 久久久久久69| 模特精品裸拍一区| 一区二区三区高清| 亚洲天堂成人| 激情一区二区三区| 欧美大片在线看| 欧美色精品在线视频| 久久精品99无色码中文字幕| 久久影院亚洲| 亚洲香蕉网站| 久久久亚洲国产天美传媒修理工| 最新国产成人av网站网址麻豆| 亚洲精品永久免费精品| 国产女主播一区二区| 欧美电影专区| 国产精品五月天| 欧美激情一二区| 国产精品一区三区| 亚洲国产美国国产综合一区二区| 欧美日韩一区高清| 开心色5月久久精品| 欧美日在线观看| 免费观看不卡av| 国产精品欧美日韩一区二区| 欧美成人免费观看| 国产精品一区免费在线观看| 亚洲电影在线| 国产精品乱码人人做人人爱| 欧美国产成人精品| 国产一区二区三区观看| 亚洲精品少妇30p| 伊人一区二区三区久久精品| 一区二区三区视频在线观看| 亚洲福利在线看| 欧美一区二区三区免费观看视频| 夜夜嗨av一区二区三区中文字幕| 久久成人精品电影| 羞羞色国产精品| 欧美日韩亚洲成人| 亚洲国产老妈| 亚洲国产精品福利| 欧美诱惑福利视频| 欧美有码在线视频| 国产精品欧美日韩久久| 99一区二区| 亚洲伦理一区| 欧美wwwwww| 亚洲风情亚aⅴ在线发布| 在线成人中文字幕| 亚洲欧美国产精品va在线观看| 亚洲精品久久久久久久久| 在线观看国产日韩| 久久精品欧美日韩| 美女爽到呻吟久久久久| 国内久久婷婷综合| 久久精品国产亚洲精品| 久久久999| 有码中文亚洲精品| 久久综合伊人77777| 欧美成人官网二区| 亚洲人屁股眼子交8| 欧美va天堂| 亚洲精品乱码久久久久久| av成人激情| 国产精品久久久久91| 亚洲欧美日韩精品一区二区| 久久av在线| 亚洲成人资源网| 欧美激情综合| 亚洲午夜激情| 久久久亚洲成人| 亚洲国产欧美日韩另类综合| 免费视频久久| 一区二区日韩| 久久九九热免费视频| 1024国产精品| 欧美日韩国产成人在线免费| 亚洲色图制服丝袜| 久久久噜噜噜久噜久久| 亚洲国产清纯| 欧美午夜在线一二页| 性欧美18~19sex高清播放| 巨乳诱惑日韩免费av| 日韩午夜三级在线| 国产欧美精品一区二区色综合 | 欧美精品久久99| 中文在线资源观看视频网站免费不卡| 亚洲一二三区在线观看| 国产一区在线视频| 欧美精品播放| 欧美一区二区三区在线| 亚洲国产成人av| 欧美一级专区| 亚洲理论在线观看| 国产亚洲精品激情久久| 欧美激情在线观看| 香蕉成人久久| 亚洲精品永久免费| 美乳少妇欧美精品| 亚洲欧洲av一区二区| 亚洲第一区在线观看| 国产精品国产三级国产普通话三级 | 欧美伦理视频网站| 久久成人羞羞网站| 亚洲视频国产视频| 91久久精品国产91性色tv| 久久大逼视频| 亚洲伊人久久综合| 亚洲精品之草原avav久久| 国内精品亚洲| 国产精品一区一区| 国产精品s色| 欧美成人免费视频| 欧美资源在线| 亚洲免费在线看| 99亚洲一区二区| 亚洲精品乱码久久久久久蜜桃麻豆| 久久久亚洲午夜电影| 欧美日韩一二三区| 亚洲第一福利在线观看| 欧美在线视频导航|