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

C++分析研究  
C++
日歷
<2012年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
統(tǒng)計
  • 隨筆 - 92
  • 文章 - 4
  • 評論 - 4
  • 引用 - 0

導航

常用鏈接

留言簿

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 
  在C++中為什么輸入輸出流不能重載為類成員函數(shù)?

  假如說operator 《 ()這是一個成員函數(shù),mealtime是一個類Time的私有成員,那么如我們看到的,如下一個輸出語句:cout《mealtime;將被編譯器處理為發(fā)送一條消息到cout,cout.operator《(mealtime);這表示operator 《必須是類ostream的一個成員,而不是類Time的一個成員。然而,即使能將這個新函數(shù)添加到標準ostream中,仍然不希望破壞標準的庫,因此operator 《必然是一個普通函數(shù),這表示如下輸出語句:cout《mealtime將被編譯器看作函數(shù)調(diào)用operator《(cout,mealtime);這樣operator《()必須具有兩個形參,第一個是ostream類,第二個是Timer類。

  大部份的標準庫實現(xiàn)中,對ostream,istream類體系采用了構(gòu)造函數(shù)保護繼承的方式……致使即使以繼承的方式來擴展流類,也會在對象實例化時遭遇阻礙……

  另一方面,標準庫中的流類,其插入符函數(shù)沒有聲明為虛函數(shù),因此子類不能對其實現(xiàn)進行覆蓋,所以也使成員函數(shù)重載遭遇到實質(zhì)的困難……

  總的來說,C++標準I/O庫非常繁雜且難,其實現(xiàn)思想很多都與常規(guī)的OOP有所出入……在使用的時候要謹慎,并最好遵從慣例……

  為什么C++賦值運算符不能被繼承?

  1,每一個類對象實例在創(chuàng)建的時候,如果用戶沒有定義“賦值運算符重載函數(shù)”,那么,編譯器會自動生成一個隱含和默認的“賦值運算符重載函數(shù)”。所以,B1的實際上的聲明應該類似于下面這種情況:

  class A1

  {

  public:

  int operator=(int a)

  {

  return 8;

  }

  int operator+(int a)

  {

  return 9;

  }

  };

  class B1 : public A1

  {

  public:

  B1& operator =(const B1& robj); // 注意這一行是編譯器添加的

  int operator-(int a)

  {

  return 7;

  }

  };

  2,C++標準規(guī)定:如果派生類中聲明的成員與基類的成員同名,那么,基類的成員會被覆蓋,哪怕基類的成員與派生類的成員的數(shù)據(jù)類型和參數(shù)個數(shù)都完全不同。顯然,B1中的賦值運算符函數(shù)名operator =和基類A1中的operator =同名,所以,A1中的賦值運算符函數(shù)int operator=(int a);被B1中的隱含的賦值運算符函數(shù)B1& operator =(const B1& robj);所覆蓋。 A1中的int operator=(int a);函數(shù)無法被B1對象訪問。 www.liuhebao.com

  3,程序中語句v = 2實際上相當于v.operator =(2);,但是A1中的int operator=(int a);已經(jīng)被覆蓋,無法訪問。而B1中默認的B1& operator =(const B1& robj);函數(shù)又與參數(shù)2的整數(shù)類型不相符,無法調(diào)用。

  4,為了確認B1中默認的B1& operator =(const B1& robj);函數(shù)的存在性,可以用以下代碼驗證:

  B1 b;

  B1 v;

  v = b; // OK, 相當于調(diào)用v.operator =(b);STA

  5,所以,“賦值運算符重載函數(shù)”不是不能被派生類繼承,而是被派生類的默認“賦值運算符重載函數(shù)”給覆蓋了。

  這就是C++賦值運算符重載函數(shù)不能被派生類繼承的真實原因!

  關(guān)于本帖問題正確性的解釋

  C++程序員的必讀經(jīng)典《Effective C++》這么說:

  條款45: 弄清C++在幕后為你所寫、所調(diào)用的函數(shù)

  一個空類什么時候不是空類? ---- 當C++編譯器通過它的時候。如果你沒有聲明下列函數(shù),體貼的編譯器會聲明它自己的版本。這些函數(shù)是:一個拷貝構(gòu)造函數(shù),一個賦值運算符,一個析構(gòu)函數(shù),一對取址運算符。另外,如果你沒有聲明任何構(gòu)造函數(shù),它也將為你聲明一個缺省構(gòu)造函數(shù)。所有這些函數(shù)都是公有的。換句話說,如果你這么寫:

  class Empty{};

  和你這么寫是一樣的:

  class Empty {

  public:

  Empty(); // 缺省構(gòu)造函數(shù)

  Empty(const Empty& rhs); // 拷貝構(gòu)造函數(shù)

  ~Empty(); // 析構(gòu)函數(shù) ---- 是否

  // 為虛函數(shù)看下文說明

  Empty&

  operator=(const Empty& rhs); // 賦值運算符

  Empty* operator&(); // 取址運算符

  const Empty* operator&() const;

  };

  但是Effective C++依然不能作為最后的判決。讓我們從C++的“憲法”中尋找答案…

  ISO/IEC 14882是C++的國際標準。該標準于1998年9月1日通過并且定案。當然,這個標準已經(jīng)不是最新標準了,但這個標準卻是目前最被廣泛支持的C++標準。所以,我一向稱之為C++的“憲法”。

  C++“憲法”第12章 Special Member Functions (第185頁)開宗明義:

  The default constructor, copy constructor and copy assignment operator, and destructor are special member functions. The implementation will implicitly declare these member functions for a class type when the program does not explicitly declare them, except as noted in 12.1. The implementation will implicitly define then if they are used, as specified in 12.1, 12.4 and 12.8. Programs shall not define implicitly-declared special member functions. Programs may explicitly refer to implicitly declared special member functions.

  譯文:

  缺省構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),拷貝賦值函數(shù),以及析構(gòu)函數(shù)這四種成員函數(shù)被稱作特殊的成員函數(shù)。如果用戶程序沒有顯式地聲明這些特殊的成員函數(shù),那么編譯器實現(xiàn)將隱式地聲明它們。12.1中有特別解釋的例外。如果用戶程序調(diào)用了這些特殊的成員函數(shù),那么編譯器就會定義這些特殊的成員函數(shù),在12.1,12.4,12.8中分別規(guī)定了編譯器對這些函數(shù)的定義方式。用戶程序不能定義隱式聲明的特殊成員函數(shù)。用戶程序可以顯式地調(diào)用隱式聲明的特殊成員函數(shù)。

  譯注:

  根據(jù)C++標準的規(guī)定:

  聲明(Declare)代表頭文件中的那部分代碼,比如下面就是一個聲明:

  class A

  {

  public:

  A();

  }

  定義(Define)代表源文件中的代碼,比如下面就是一個定義:

  A::A()

  {}

  綜上所述,可知,第一個說法是正確的。

  關(guān)于第二個說法的正確性,可參見C++“憲法”3.3.7 Name Hiding (第28頁)(由于我手上的C++“憲法”是掃描版,無法直接拷貝文字,且文字較多,懶得輸入了。)

  第3,4,5點說法都是常識性的知識,可以直接驗證。
posted on 2012-11-26 18:14 HAOSOLA 閱讀(262) 評論(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>
            亚洲精品乱码久久久久久日本蜜臀| 久久夜色精品国产亚洲aⅴ| 欧美一级午夜免费电影| 亚洲中无吗在线| 午夜精品剧场| 久久一区视频| 亚洲三级免费电影| 亚洲午夜激情在线| 欧美影院成人| 欧美黄污视频| 国产精品视频精品视频| 国产一区二区三区在线观看视频| 国内精品伊人久久久久av一坑| 亚洲国产另类精品专区| 日韩视频在线免费观看| 亚欧成人在线| 国产欧美日韩三级| 永久555www成人免费| 一本久久综合亚洲鲁鲁| 欧美在线观看视频| 亚洲乱码精品一二三四区日韩在线 | 亚洲国产欧美一区二区三区久久 | 久久精品国产99国产精品| 久久久久国内| 欧美日韩一区二区高清| 黄色工厂这里只有精品| 亚洲网在线观看| 老司机成人在线视频| 亚洲伦理网站| 欧美a一区二区| 国产日韩欧美电影在线观看| 日韩视频精品在线| 麻豆成人综合网| 亚洲综合日本| 欧美午夜国产| 亚洲免费福利视频| 免费久久精品视频| 欧美在线二区| 国产精品一区二区三区乱码| 99精品黄色片免费大全| 欧美xxx在线观看| 久久国产精品久久久久久久久久| 国产精品夫妻自拍| 一区二区三区黄色| 亚洲激情另类| 欧美mv日韩mv国产网站| 伊人夜夜躁av伊人久久| 久久婷婷久久| 久久久久久香蕉网| 在线播放亚洲一区| 欧美va亚洲va国产综合| 久久精品亚洲一区二区三区浴池| 国产欧美韩国高清| 欧美一级在线视频| 亚洲影视在线| 国产亚洲欧洲| 久久综合狠狠| 久久人人超碰| 亚洲欧洲综合| 亚洲日本成人| 国产精品久久久久秋霞鲁丝| 午夜精品三级视频福利| 亚洲综合久久久久| 韩日欧美一区二区三区| 久久婷婷久久| 久久夜色精品亚洲噜噜国产mv | 欧美影院在线播放| 榴莲视频成人在线观看| 国产综合久久久久久鬼色| 欧美剧在线观看| 亚洲欧美日产图| 久久久999国产| 亚洲男女毛片无遮挡| 久久大香伊蕉在人线观看热2| 国产欧美精品在线播放| 99精品热视频只有精品10| 国产精品男人爽免费视频1| 亚洲丁香婷深爱综合| 国产精品久久久久久久久借妻| 欧美成在线观看| 亚洲精美视频| 亚洲国产综合在线看不卡| 欧美福利视频一区| 亚洲丶国产丶欧美一区二区三区| 在线观看国产成人av片| 欧美国产日韩免费| 99精品视频免费在线观看| 午夜免费久久久久| 亚洲国产综合在线看不卡| 亚洲伊人久久综合| 狠狠爱www人成狠狠爱综合网| 麻豆久久婷婷| 亚洲免费视频网站| 久久综合狠狠综合久久激情| 亚洲国产欧美另类丝袜| 国产精品v片在线观看不卡| 91久久香蕉国产日韩欧美9色| 久久五月天婷婷| 国产精品99久久久久久白浆小说| 久久久久久久高潮| 亚洲另类一区二区| 免费一区二区三区| 亚洲欧美欧美一区二区三区| 好吊色欧美一区二区三区视频| 欧美精品福利| 久久久噜噜噜久久中文字幕色伊伊| 亚洲国产精品传媒在线观看| 欧美一区二区视频网站| 91久久精品国产91性色| 韩国自拍一区| 国产精品视频大全| 国产精品一卡二卡| 欧美日韩亚洲综合| 久久国产日韩欧美| 亚洲在线播放电影| 一区二区日本视频| 一本久久青青| 国产精品日本欧美一区二区三区| 亚洲天堂av在线免费| 久久最新视频| 亚洲激情电影在线| 国产精品美女久久久浪潮软件| 欧美中文字幕久久| 亚洲精品免费看| 欧美大片一区二区三区| 亚洲欧美日韩电影| 亚洲开发第一视频在线播放| 国产欧美二区| 欧美日韩一区二区高清| 蜜桃久久av一区| 欧美在线观看www| 宅男精品视频| 久久国产一二区| 亚洲精选大片| 久久精品国产精品亚洲精品| 麻豆成人91精品二区三区| 欧美特黄一级| 99视频精品全部免费在线| 久久精品72免费观看| 日韩一级不卡| 欧美大片一区二区三区| 亚洲欧洲精品一区二区| 久久不射中文字幕| 国产精品美女在线观看| 9l国产精品久久久久麻豆| 欧美日韩一区二区三区| 在线观看欧美| 欧美国产视频一区二区| 久久综合伊人77777蜜臀| 一区在线视频观看| 欧美亚洲一区在线| 校园春色综合网| 韩国av一区二区三区四区| 久久视频在线免费观看| 久久精品国产亚洲一区二区三区| 国产女人精品视频| 猛男gaygay欧美视频| 欧美大秀在线观看| 一区二区三区精品视频| 午夜精品视频| 在线观看国产一区二区| 亚洲区国产区| 国产一区二区黄| 欧美激情一区二区三区在线视频| 欧美日本国产精品| 久久一区亚洲| 欧美视频在线不卡| 久久综合五月天婷婷伊人| 欧美精品免费在线| 久久精品官网| 欧美色中文字幕| 免费短视频成人日韩| 国产精品久久久久国产a级| 久久亚洲国产精品一区二区| 欧美日韩国产精品成人| 久久综合九色| 国产综合婷婷| 欧美一区二区免费观在线| 亚洲欧美色婷婷| 国产精品久久久久久久久搜平片| 亚洲电影自拍| 亚洲日产国产精品| 久久久亚洲一区| 老色鬼久久亚洲一区二区| 国产亚洲一区二区在线观看| 国产亚洲精品高潮| 一区二区三区四区五区精品| 欧美成人精品一区| 欧美国产成人在线| 亚洲国产精品久久久久| 久久久久久亚洲精品杨幂换脸| 久久精品国产久精国产爱| 国产专区欧美专区| 久久精品一区二区三区不卡牛牛| 久热re这里精品视频在线6| 影音先锋日韩精品| 欧美精品久久一区二区| 亚洲视频一区二区| 久久久精品性| 亚洲理伦在线|