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

C++分析研究  
C++
日歷
<2013年9月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345
統計
  • 隨筆 - 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>
            久久久噜噜噜久久中文字幕色伊伊| 一区二区av在线| 欧美在线亚洲综合一区| 国产精品久久久久久久久久ktv| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲黄色免费网站| 久久久国产精品一区二区三区| 国产手机视频一区二区| 久久精品国产999大香线蕉| 欧美一级在线视频| 在线观看91久久久久久| 欧美激情第10页| 欧美日韩成人综合在线一区二区 | 国产在线麻豆精品观看| 久久久成人精品| 久久久久在线观看| 99国产麻豆精品| 亚洲午夜女主播在线直播| 国产午夜精品理论片a级大结局| 欧美在线视频一区| 久久米奇亚洲| 亚洲一区二区成人在线观看| 亚洲自拍高清| 亚洲国产美女久久久久| 亚洲精选成人| 国产一区二区三区在线观看网站| 男女精品网站| 国产精品黄视频| 欧美成人精品h版在线观看| 欧美精品在线观看| 欧美在线视频全部完| 久久一二三四| 亚洲欧美日韩综合aⅴ视频| 久久免费视频在线| 亚洲在线1234| 毛片精品免费在线观看| 亚洲欧美一区二区在线观看| 久久青草久久| 欧美综合国产| 欧美日韩国产另类不卡| 久久亚洲欧美| 国产美女精品视频免费观看| 亚洲国产精品成人一区二区| 国产欧美日韩亚洲一区二区三区| 亚洲国产欧美久久| 国内精品久久久久影院 日本资源| 亚洲精品国产精品国自产观看浪潮| 国产亚洲福利| 亚洲小视频在线| 日韩五码在线| 久久久女女女女999久久| 午夜精品美女久久久久av福利| 欧美黄色大片网站| 欧美电影打屁股sp| 娇妻被交换粗又大又硬视频欧美| 一区二区三区四区在线| 99re热这里只有精品视频| 久久久噜噜噜久久狠狠50岁| 久久国内精品视频| 国产精品色婷婷| 9色porny自拍视频一区二区| 日韩一区二区精品葵司在线| 噜噜噜久久亚洲精品国产品小说| 久久久久国产免费免费| 国产精品一区二区三区四区| av成人免费在线观看| 亚洲久色影视| 欧美激情片在线观看| 欧美高清自拍一区| 亚洲激情网站| 欧美国产欧美综合 | 校园激情久久| 国产日韩欧美精品一区| 欧美亚洲视频在线观看| 欧美一区二区三区久久精品茉莉花| 欧美日韩一卡| 亚洲伊人观看| 久久一区中文字幕| 在线观看成人小视频| 久久久综合网站| 亚洲大胆女人| 一区二区三区波多野结衣在线观看| 欧美日韩不卡在线| 亚洲一区欧美激情| 久久久久高清| 亚洲欧洲一区二区在线观看| 欧美精选一区| 亚洲影院在线观看| 久久综合成人精品亚洲另类欧美| 亚洲第一搞黄网站| 欧美韩日一区二区| 亚洲综合电影一区二区三区| 久久久精品一区| 亚洲精品一二三| 国产精品欧美精品| 久久精品一区中文字幕| 亚洲国产精品久久久久秋霞不卡| 一本一道久久综合狠狠老精东影业 | 欧美性大战久久久久| 亚洲一区视频在线| 美女主播视频一区| 99在线精品视频在线观看| 国产精品高潮粉嫩av| 久久久久久噜噜噜久久久精品 | 欧美主播一区二区三区美女 久久精品人| 久久久国产精品亚洲一区| 国内一区二区三区| 免费视频一区| 亚洲激情视频在线播放| 欧美一区二区三区日韩| 亚洲精品久久久久久久久| 国产精品久久午夜| 蜜臀久久99精品久久久久久9 | 亚洲国产精品毛片| 欧美一区高清| 一本久道久久综合中文字幕 | 欧美精品一区二区三区四区| 午夜欧美电影在线观看| 亚洲欧洲在线观看| 久久婷婷久久| 香蕉尹人综合在线观看| 亚洲精品乱码久久久久久| 国产日韩专区在线| 欧美日韩视频在线| 欧美11—12娇小xxxx| 欧美一区二区三区啪啪| 99热在这里有精品免费| 欧美激情在线观看| 久久人人97超碰国产公开结果 | 亚洲欧美日韩在线| 亚洲每日在线| 亚洲国产日韩欧美在线图片| 国产日韩欧美另类| 国产精品久久久久av| 欧美人与性禽动交情品 | 欧美一区=区| 亚洲综合成人婷婷小说| 99re热精品| 日韩一二三在线视频播| 亚洲电影网站| 欧美大片免费观看在线观看网站推荐| 欧美主播一区二区三区美女 久久精品人| 欧美久久一区| 狼人社综合社区| 久久频这里精品99香蕉| 久久精品网址| 久久美女性网| 久久综合中文| 久久亚洲国产精品日日av夜夜| 午夜在线电影亚洲一区| 亚洲专区欧美专区| 午夜精品视频在线观看| 欧美影院成年免费版| 欧美资源在线| 久热国产精品视频| 欧美成人按摩| 欧美日韩国产首页在线观看| 欧美日韩ab片| 国产精品入口福利| 国产亚洲女人久久久久毛片| 狠狠综合久久| 亚洲精品一区二区三区蜜桃久 | 亚洲黄色免费网站| 亚洲九九爱视频| 亚洲一区欧美| 久久久久久久一区| 欧美成人按摩| 亚洲精选在线观看| 亚洲一区二区三区色| 性欧美xxxx大乳国产app| 久久久久久网| 欧美日韩免费在线观看| 国产日韩欧美三区| 亚洲福利在线看| 亚洲图片欧美日产| 久久天天躁狠狠躁夜夜爽蜜月| 欧美r片在线| 99视频精品在线| 久久久www免费人成黑人精品| 欧美激情精品久久久| 国产精品视频yy9099| 在线成人国产| 亚洲免费视频中文字幕| 欧美 日韩 国产在线| 一本久久青青| 葵司免费一区二区三区四区五区| 欧美人成免费网站| 黄色影院成人| 亚洲午夜羞羞片| 男女av一区三区二区色多| 中文在线资源观看网站视频免费不卡 | 亚洲欧美成人一区二区在线电影| 久久男人av资源网站| 99精品99| 免费欧美日韩| 国产视频久久久久久久| 亚洲天堂久久| 亚洲韩国日本中文字幕| 久久精品av麻豆的观看方式| 国产精品国产精品|