隨筆-348  評(píng)論-598  文章-0  trackbacks-0
          1.今天看到了Mastering Classes and Objects這章,發(fā)現(xiàn)Copy Constructor還是自己寫好,作者已經(jīng)用很詳細(xì)的例子說明了Compiler為我們構(gòu)造的Copy Constructor,只是將變量指向那塊已分配的內(nèi)存,而不是真正的Copy...所以我們需要重新構(gòu)造自己的 Constructor將被Copy的變量真正的Copy過來,用兩個(gè)內(nèi)存空間存放同樣的數(shù)據(jù)。

          operator=也是一樣,我們應(yīng)該先將原變量?jī)?nèi)部的一些內(nèi)存空間釋放掉,然后申請(qǐng)新的來存放=右邊的內(nèi)部成員。
          ?1Spreadsheet::Spreadsheet(const?Spreadsheet&?src)
          ?2{
          ?3int?i,?j;
          ?4mWidth?=?src.mWidth;
          ?5mHeight?=?src.mHeight;
          ?6mCells?=?new?SpreadsheetCell*?[mWidth];
          ?7for?(i?=?0;?i?<?mWidth;?i++)?{
          ?8mCells[i]?=?new?SpreadsheetCell[mHeight];
          ?9}

          10for?(i?=?0;?i?<?mWidth;?i++)?{
          11for?(j?=?0;?j?<?mHeight;?j++)?{
          12mCells[i][j]?=?src.mCells[i][j];
          13}

          14}

          15}

          Spreadsheet&?Spreadsheet::operator=(const?Spreadsheet&?rhs)
          {
          int?i,?j;
          //?Check?for?self-assignment.
          if?(this?==?&rhs)?{
          return?(*this);
          }

          //?Free?the?old?memory.
          for?(i?=?0;?i?<?mWidth;?i++)?{
          delete[]?mCells[i];
          }

          delete[]?mCells;
          //?Copy?the?new?memory.
          mWidth?=?rhs.mWidth;
          mHeight?
          =?rhs.mHeight;
          mCells?
          =?new?SpreadsheetCell*?[mWidth];
          for?(i?=?0;?i?<?mWidth;?i++)?{
          mCells[i]?
          =?new?SpreadsheetCell[mHeight];
          }

          for?(i?=?0;?i?<?mWidth;?i++)?{
          for?(j?=?0;?j?<?mHeight;?j++)?{
          mCells[i][j]?
          =?rhs.mCells[i][j];
          }

          }

          2.區(qū)分下
          SomeClass?sc;
          SomeClass?scAnother;
          scAnother
          =sc;


          SomeClass?sc;
          SomeClass?scAnother
          =sc;

          其實(shí)兩個(gè)的意思是不一樣的,前者調(diào)用的是operator=而后者調(diào)用的是Copy Constructor。
          如果你沒有重載operator=,那么兩段代碼都是重載Copy Constructor.

          發(fā)現(xiàn)寫寫筆記,還是有助于記憶的。

          ---------------------------------------------------------
          專注移動(dòng)開發(fā)

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2007-01-31 13:27 TiGERTiAN 閱讀(405) 評(píng)論(0)  編輯  收藏 所屬分類: C/C++

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 当雄县| 伊川县| 潜江市| 庄河市| 噶尔县| 盐池县| 石嘴山市| 周至县| 乐安县| 六枝特区| 嘉定区| 华蓥市| 吴忠市| 樟树市| 德阳市| 府谷县| 商南县| 米林县| 拉萨市| 改则县| 濮阳县| 宝丰县| 静乐县| 遵义市| 资溪县| 台中市| 积石山| 越西县| 辉县市| 海兴县| 林周县| 辽宁省| 赣榆县| 常宁市| 克什克腾旗| 石景山区| 利川市| 禄劝| 大洼县| 武义县| 尉氏县|