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

C++分析研究  
C++
日歷
<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456
統計
  • 隨筆 - 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>
            美女日韩在线中文字幕| 亚洲天堂成人在线视频| 一区二区三区在线视频播放| 欧美日韩www| 亚洲欧美视频在线观看| 一本大道久久精品懂色aⅴ| 99国产精品视频免费观看| 最新成人av在线| 久久久久国产一区二区| 久久深夜福利免费观看| 亚洲欧美日韩综合| 午夜精品短视频| 久久久久久国产精品一区| 久久久久一本一区二区青青蜜月| 亚洲字幕一区二区| 欧美一区二区在线观看| 久久久91精品国产| 欧美日韩亚洲一区二区三区在线| 欧美日韩在线一区| 国产精品视频观看| 亚洲精品国产精品国自产观看浪潮| 亚洲毛片在线看| 久久婷婷麻豆| 亚洲一区区二区| 欧美日韩免费区域视频在线观看| 国产麻豆综合| 亚洲午夜久久久久久尤物| 亚洲成色777777女色窝| 午夜影视日本亚洲欧洲精品| 欧美好骚综合网| 黄网站色欧美视频| 久久成人羞羞网站| 一二美女精品欧洲| 欧美精品不卡| 亚洲免费精彩视频| 久久精品国产99国产精品| 国产欧美在线观看| 亚洲午夜女主播在线直播| 亚洲国产导航| 欧美日韩国产三区| 亚洲三级视频| 99综合电影在线视频| 国产精品国产三级国产普通话三级| 久久激情五月丁香伊人| 久久久久欧美| 在线日韩欧美视频| 久久综合电影一区| 久久亚洲精品视频| 亚洲精品久久久久久久久久久久久 | 亚洲性av在线| 亚洲一级在线| 狠狠色狠狠色综合| 亚洲激情专区| 国产亚洲综合性久久久影院| 欧美成人精品激情在线观看| 欧美+日本+国产+在线a∨观看| 亚洲国产高清一区二区三区| 亚洲精品久久嫩草网站秘色| 国产精品美女久久| 久久人人97超碰国产公开结果| 免费一区视频| 美国成人毛片| 欧美日本亚洲韩国国产| 久久久国产91| 国产婷婷精品| 一本色道久久综合亚洲91| 国内激情久久| 99视频在线精品国自产拍免费观看| 国产一区二区三区黄视频| 亚洲精品国产日韩| 亚洲福利视频网| 久久躁日日躁aaaaxxxx| 久久av二区| 国产一区二区中文| 香蕉视频成人在线观看| 久久久91精品| 亚洲一级二级| 欧美日韩国产小视频| 久久偷看各类wc女厕嘘嘘偷窃| 国产精品xvideos88| 亚洲国产高清视频| 亚洲欧洲在线看| 嫩草国产精品入口| 最新国产の精品合集bt伙计| 亚洲黄色尤物视频| 欧美精品一区二区三区很污很色的| 亚洲第一在线综合在线| 国产一区二区三区在线播放免费观看| 亚洲综合第一页| 久久综合久久综合久久综合| 亚洲国产精品视频| 欧美日韩免费观看一区二区三区| 一区二区三区精品视频| 亚洲欧美乱综合| 亚洲人体影院| 国产日韩在线不卡| 久久九九电影| 在线视频精品一区| 久久经典综合| 亚洲综合精品四区| 亚洲国产成人久久| 国户精品久久久久久久久久久不卡| 六月天综合网| 欧美伊人久久久久久午夜久久久久| 欧美国产精品中文字幕| 欧美在线网站| 亚洲一区二区免费| 亚洲另类视频| 亚洲日本va午夜在线电影| 欧美性jizz18性欧美| 蜜桃av综合| 免费在线亚洲| 欧美精品久久天天躁| 午夜欧美电影在线观看| 狠狠色综合网| 国产精品五区| 欧美日韩在线视频观看| 久久婷婷蜜乳一本欲蜜臀| 欧美中文字幕在线| 校园激情久久| 亚洲欧美日韩中文视频| 亚洲欧美在线视频观看| 日韩午夜av电影| 亚洲一区3d动漫同人无遮挡| 日韩一级视频免费观看在线| 久久米奇亚洲| 亚洲精品1234| 亚洲女性裸体视频| 久久久久久久性| 欧美精品九九| 一色屋精品视频在线看| 亚洲免费av观看| 欧美在线免费观看视频| 免费日韩成人| 亚洲天堂成人在线观看| 久久天天躁狠狠躁夜夜av| 欧美日韩国产va另类| 国产伦精品一区二区三区| 亚洲人成亚洲人成在线观看| 亚洲永久免费视频| 美国十次成人| 羞羞漫画18久久大片| 欧美激情网友自拍| 国产一区二区三区四区五区美女| 一区二区三区不卡视频在线观看 | 日韩写真视频在线观看| 久久gogo国模裸体人体| 欧美日韩在线另类| 99精品国产在热久久下载| 欧美成人精品h版在线观看| 亚洲男人的天堂在线aⅴ视频| 欧美午夜精品一区| 亚洲视频网在线直播| 亚洲精品免费网站| 亚洲精品四区| 欧美午夜理伦三级在线观看| 亚洲高清免费在线| 免费久久99精品国产自| 久久网站免费| 一区二区91| 午夜精品999| 亚洲国产91| 亚洲狼人精品一区二区三区| 久久久免费av| 在线中文字幕日韩| 亚洲人成在线观看| 国产精品成人一区二区| 性感少妇一区| 老牛影视一区二区三区| 艳妇臀荡乳欲伦亚洲一区| 亚洲无限乱码一二三四麻| 国产精品自在线| 亚洲第一区在线观看| 欧美亚州在线观看| 久久亚洲综合色| 国产精品视频999| 欧美大胆a视频| 国产精品大片免费观看| 欧美激情视频一区二区三区免费| 欧美日本在线视频| 久久精品免费电影| 欧美色精品在线视频| 欧美一区日韩一区| 欧美激情精品| 欧美激情精品久久久| 国产偷久久久精品专区| 亚洲午夜精品一区二区三区他趣| 在线日韩av永久免费观看| 欧美一级免费视频| 欧美在线地址| 国产一区免费视频| 久久精品国产99国产精品| 亚洲免费在线观看| 国产精品欧美一区喷水| 亚洲精品国产精品国产自| 亚洲人成亚洲人成在线观看图片 | 一本久久综合亚洲鲁鲁五月天| 久久久久久尹人网香蕉| 久久全球大尺度高清视频| 伊人激情综合|