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

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>
            国内伊人久久久久久网站视频 | 欧美在线你懂的| 一区二区三区日韩欧美| 午夜精品视频网站| 欧美国产亚洲另类动漫| 亚洲在线一区二区| 亚洲欧美福利一区二区| 国产精品一区二区黑丝| 9久re热视频在线精品| 亚洲欧洲一区二区三区| 亚洲综合精品一区二区| 欧美激情一区二区三区全黄| 亚洲一区二区av电影| 国产欧美日韩精品丝袜高跟鞋| 国产精品久久久久久福利一牛影视| 欧美三级电影一区| 欧美另类变人与禽xxxxx| 欧美激情一区二区三区蜜桃视频| 欧美理论大片| 亚洲综合国产| 美日韩丰满少妇在线观看| 国内精品久久久久国产盗摄免费观看完整版| 国产视频亚洲| 香蕉国产精品偷在线观看不卡| 久久久精品2019中文字幕神马| 欧美在线啊v| 亚洲一区久久久| 在线播放亚洲| 久久男人av资源网站| 亚洲人成在线播放网站岛国| 久久精品国产成人| 亚洲欧美日韩久久精品| 国产欧美日韩综合一区在线观看| 亚洲高清自拍| 欧美激情第4页| 国产精品成人播放| 欧美黑人在线观看| 国一区二区在线观看| 中文欧美日韩| 国内精品久久久久影院优| 亚洲精品视频在线看| 欧美性一区二区| 欧美一区午夜精品| 欧美国产丝袜视频| 亚洲一区免费网站| 免费精品视频| 亚洲免费一区二区| 午夜精品国产| 亚洲影音一区| 欧美日韩妖精视频| 久久9热精品视频| 欧美视频一区二区三区四区| 亚洲国产清纯| 欧美高清影院| 欧美日韩第一区日日骚| 亚洲欧美中日韩| 亚洲欧美激情一区| 国产精品午夜春色av| 久久精品视频在线观看| 国产精品区一区二区三| 中文av字幕一区| 亚洲女爱视频在线| 国产精品爽爽爽| 亚洲欧美日韩中文在线制服| 亚洲欧美日韩国产一区| 欧美专区日韩视频| 亚洲免费观看| 久久精品国产91精品亚洲| 亚洲精品视频中文字幕| 亚洲一区二区精品| 亚洲综合丁香| 国产日韩欧美综合| 亚洲国产影院| 亚洲理论在线| 欧美日韩激情网| 国产精品99久久不卡二区| 午夜精品久久久久久99热软件| 久久精品久久综合| 亚洲一区www| 欧美福利小视频| 亚洲精品在线二区| 亚洲自拍16p| 国语精品中文字幕| 中文精品一区二区三区| 午夜国产精品视频免费体验区| 久久一二三四| 久久九九热re6这里有精品| 国语自产精品视频在线看一大j8| 欧美高清视频一区二区| 亚洲毛片在线| 国产伦精品一区二区三| 久久久精品五月天| 亚洲精选中文字幕| 久久se精品一区二区| 亚洲第一在线综合在线| 伊人久久噜噜噜躁狠狠躁| 亚洲狠狠婷婷| 久久疯狂做爰流白浆xx| 亚洲第一主播视频| 欧美亚洲第一页| 久久夜色撩人精品| 亚洲一区视频在线| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲综合视频1区| 今天的高清视频免费播放成人| 另类图片国产| 国产手机视频精品| 欧美风情在线观看| 亚洲欧美综合v| 最新精品在线| 亚洲一区二区动漫| 黑人一区二区三区四区五区| 欧美日韩成人综合在线一区二区| 欧美国产日本| 欧美在线看片a免费观看| 亚洲三级视频在线观看| 国产一区二区日韩精品| 久久av二区| 亚洲天堂成人| 久久精品国产第一区二区三区最新章节 | 蜜臀va亚洲va欧美va天堂| 免费不卡在线视频| 蜜桃av一区二区三区| 香蕉免费一区二区三区在线观看| 国产精品久久| 欧美屁股在线| 欧美国产日韩亚洲一区| 久久久亚洲高清| 亚洲欧洲在线看| 欧美1区2区3区| 亚洲一区二区三区四区在线观看| 欧美日韩在线三级| 欧美激情精品久久久久久大尺度| 亚洲美女中出| 久久精品国产99国产精品| 亚洲一区欧美一区| 亚洲色图综合久久| 伊人久久大香线| 欧美成年人视频网站| 久久久青草青青国产亚洲免观| 国产主播一区二区三区四区| 国产精品美女久久久| 久久久成人网| 久久久久一区二区| 亚洲欧洲中文日韩久久av乱码| 亚洲先锋成人| 亚洲一区欧美| 亚洲国产精品va| 欧美小视频在线| 国产精品乱子久久久久| 国产精品日韩久久久| 久久综合亚州| 欧美大片免费观看在线观看网站推荐 | 亚洲人成网站色ww在线| 亚洲小视频在线观看| 久久伊人亚洲| 国产精品中文在线| 国产精品自拍视频| 国产亚洲欧美aaaa| 亚洲成人原创| 一区二区精品在线| 亚洲欧美另类国产| 欧美在线一二三区| 亚洲毛片视频| 午夜欧美大尺度福利影院在线看| 在线播放不卡| 日韩天天综合| 91久久精品国产91久久| 一本久久综合亚洲鲁鲁| 伊人久久大香线蕉综合热线| 亚洲国产精品精华液网站| 亚洲免费大片| 久久精品99| 亚洲黄色精品| 亚洲欧美在线免费观看| 蜜臀91精品一区二区三区| 欧美三级欧美一级| 国内精品视频在线播放| 国产精品视频久久| 黄色成人在线网站| 亚洲视频日本| 快she精品国产999| 在线亚洲伦理| 欧美黄污视频| 激情av一区| 亚洲女人天堂av| 亚洲影院在线| 欧美高清自拍一区| 亚洲欧美在线视频观看| 欧美精品一区二区三区一线天视频| 麻豆国产精品一区二区三区| 国产精品a久久久久久| 亚洲激情在线激情| 亚洲激情在线| 久久噜噜噜精品国产亚洲综合| 久久福利毛片| 一区二区三区视频在线看| 亚洲午夜精品久久| 欧美91大片| 亚洲国产日韩一区二区|