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

C++分析研究  
C++
日歷
<2013年10月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789
統計
  • 隨筆 - 92
  • 文章 - 4
  • 評論 - 4
  • 引用 - 0

導航

常用鏈接

留言簿

隨筆檔案

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

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

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

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

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

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

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

  1,每一個類對象實例在創建的時候,如果用戶沒有定義“賦值運算符重載函數”,那么,編譯器會自動生成一個隱含和默認的“賦值運算符重載函數”。所以,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++標準規定:如果派生類中聲明的成員與基類的成員同名,那么,基類的成員會被覆蓋,哪怕基類的成員與派生類的成員的數據類型和參數個數都完全不同。顯然,B1中的賦值運算符函數名operator =和基類A1中的operator =同名,所以,A1中的賦值運算符函數int operator=(int a);被B1中的隱含的賦值運算符函數B1& operator =(const B1& robj);所覆蓋。 A1中的int operator=(int a);函數無法被B1對象訪問。 www.liuhebao.com

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

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

  B1 b;

  B1 v;

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

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

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

  關于本帖問題正確性的解釋

  C++程序員的必讀經典《Effective C++》這么說:

  條款45: 弄清C++在幕后為你所寫、所調用的函數

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

  class Empty{};

  和你這么寫是一樣的:

  class Empty {

  public:

  Empty(); // 缺省構造函數

  Empty(const Empty& rhs); // 拷貝構造函數

  ~Empty(); // 析構函數 ---- 是否

  // 為虛函數看下文說明

  Empty&

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

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

  const Empty* operator&() const;

  };

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

  ISO/IEC 14882是C++的國際標準。該標準于1998年9月1日通過并且定案。當然,這個標準已經不是最新標準了,但這個標準卻是目前最被廣泛支持的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.

  譯文:

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

  譯注:

  根據C++標準的規定:

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

  class A

  {

  public:

  A();

  }

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

  A::A()

  {}

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

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

  第3,4,5點說法都是常識性的知識,可以直接驗證。
posted on 2012-11-26 18:14 HAOSOLA 閱讀(266) 評論(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成人激情| 亚洲激情午夜| 亚洲欧洲在线一区| 欧美女同在线视频| 亚洲欧美日韩系列| 欧美激情欧美激情在线五月| 这里只有精品视频| 欧美va日韩va| 亚洲免费视频在线观看| 欧美大片免费观看在线观看网站推荐| 一区二区三区国产| 一区免费在线| 国产一区二区黄色| 国产精品视频内| 欧美久久久久久久久| 久久久www成人免费毛片麻豆| 日韩亚洲视频| 国产精品一区视频| 亚洲国产日韩欧美一区二区三区| 91久久中文| 亚洲国产成人久久综合| 国产精品视频区| 国产精品久久久99| 欧美午夜精品久久久久久久 | 国产日产欧产精品推荐色| 欧美黄色一级视频| 亚洲视频免费在线| 亚洲一区二区三区在线视频| 亚洲人成在线观看网站高清| 在线日韩欧美| 亚洲精品三级| 99精品欧美一区二区蜜桃免费| 日韩一区二区精品在线观看| 99精品欧美| 午夜日本精品| 蜜臀va亚洲va欧美va天堂| 欧美激情一二区| 一本色道久久综合亚洲二区三区 | 久久亚洲春色中文字幕| 蜜桃av噜噜一区| 欧美日韩亚洲一区二区三区| 欧美视频中文一区二区三区在线观看| 欧美视频一区二| 一区视频在线| 国产精品成人一区二区| 亚洲第一精品夜夜躁人人爽| 91久久久久久久久久久久久| 欧美高清视频一区二区| 欧美激情一区二区三区在线视频| 欧美激情中文字幕一区二区| 99re成人精品视频| 亚洲一区自拍| 美女图片一区二区| 国内精品久久久久久久影视麻豆| 午夜精品久久99蜜桃的功能介绍| 欧美二区在线观看| 久久精品91久久久久久再现| 欧美色图一区二区三区| 一区二区三区国产精华| 欧美丰满少妇xxxbbb| 久久久噜噜噜久久狠狠50岁| 亚洲你懂的在线视频| 亚洲高清一区二| 欧美国产日韩二区| 麻豆freexxxx性91精品| 亚洲高清免费视频| 亚洲电影免费观看高清完整版在线| 久久精品免费电影| 黄网动漫久久久| 亚洲国产三级| 欧美精品三级| 亚洲欧美韩国| 午夜视频在线观看一区二区三区| 国产视频在线一区二区| 久久精品国产一区二区三| 久久精品国产精品亚洲| 亚洲国产经典视频| 99av国产精品欲麻豆| 国产精品捆绑调教| 亚洲福利视频网站| 国产欧美日韩精品一区| 亚洲国产婷婷综合在线精品 | 亚洲一区影院| 亚洲国产成人在线视频| 亚洲精品国产品国语在线app| 欧美日韩一区二区欧美激情| 欧美一级在线视频| 亚洲人成人77777线观看| 精品91视频| 亚洲一区二区三区国产| 亚洲精品国产欧美| 性欧美18~19sex高清播放| 樱花yy私人影院亚洲| 一区二区毛片| 99精品视频一区| 久久久久99精品国产片| 亚洲女女做受ⅹxx高潮| 欧美高清视频一区| 久久人人97超碰国产公开结果| 欧美在线综合| 国产精品一区二区久久久| 亚洲人久久久| 99国产一区| 久久一区二区视频| 欧美制服丝袜第一页| 国产精品久久久久久妇女6080 | 亚洲国产美国国产综合一区二区| 亚洲女人av| 性色av一区二区怡红| 国产精品都在这里| 亚洲一级电影| 久久国产色av| 国产亚洲欧洲997久久综合| 亚洲影音先锋| 久久另类ts人妖一区二区| 国产在线精品成人一区二区三区| 午夜国产精品影院在线观看| 久久精品一区中文字幕| 在线观看国产欧美| 免费美女久久99| 一本色道久久综合亚洲二区三区| 亚洲欧美国产高清va在线播| 国产日韩综合| 老鸭窝亚洲一区二区三区| 亚洲丰满在线| 亚洲免费视频观看| 亚洲高清免费视频| 欧美日韩三区四区| 欧美在线观看一区二区三区| 久久综合色天天久久综合图片| 亚洲国产三级| 欧美在线精品免播放器视频| 亚洲成人资源| 国产欧美日韩亚洲一区二区三区| 久久久最新网址| 亚洲一区欧美激情| 亚洲精品综合在线| 欧美精品一区二区三区四区| 欧美一区二区三区日韩| 亚洲精品久久久久久久久久久| 久久精品首页| 新狼窝色av性久久久久久| 亚洲国产美女久久久久| 国产午夜精品一区理论片飘花| 欧美成人首页| 浪潮色综合久久天堂| 欧美亚洲视频在线看网址| 中文久久乱码一区二区| 亚洲精品视频免费在线观看| 欧美电影在线免费观看网站| 蜜臀久久久99精品久久久久久 | 亚洲另类视频| 一本色道久久综合亚洲精品不 | 黄色精品网站| 亚洲高清一区二| 一本一本久久a久久精品综合麻豆| 亚洲二区在线视频| 亚洲精品亚洲人成人网| 一区二区日本视频| 中文国产一区| 久久精品论坛| 亚洲国产另类久久久精品极度| 91久久精品国产91性色| 99国产精品视频免费观看一公开| 夜夜爽99久久国产综合精品女不卡| 日韩一级裸体免费视频| 亚洲欧美中文另类| 六月婷婷一区| 国产精品高潮呻吟久久av黑人| 国产中文一区二区三区| 亚洲老板91色精品久久| 亚洲欧美一区二区原创| 女女同性女同一区二区三区91| 亚洲国产精品美女| 在线国产精品一区| 亚洲综合视频一区| 欧美sm视频| 久久久999精品免费| 国产精品护士白丝一区av| 在线不卡中文字幕播放| 亚洲在线视频观看| 亚洲黄色免费网站| 久久久福利视频| 国产日产欧美精品| 亚洲网在线观看| 亚洲国产欧美一区二区三区久久| 欧美一级网站| 国产欧美丝祙| 欧美一区日韩一区| 一本久道久久综合狠狠爱| 美女精品在线| 日韩小视频在线观看专区| 亚洲国产二区| 欧美精品久久久久久久| 亚洲国产成人久久综合| 亚洲福利视频在线| 欧美午夜欧美| 久久国产加勒比精品无码| 欧美影院精品一区| 亚洲高清中文字幕|