第十一章类别和动态记忆体配置.PDFVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章类别和动态记忆体配置

第十一章 類別和動態記憶體配置 這章主要討論如何在類別中使用 new 和 delete 及如何處理動態記憶體所產生的 一些問題,主題似乎很少,但這些主題會影響建構函數及解構函數的設計以及運算 子的多型。 先看一個特別的例子。若要產生一個類別,其成員表示姓名,最簡單的方法是 用字元陣列儲存。但其缺點是字元陣列的長度該設多少呢? 若為 14 個字元的陣列, 遇到 Barthlomew Smeadsbury-Crafthovingham 時就不夠了,為安全起見,改用40 個字元 的陣列,但若產生2000 個此種物件的陣列,因很多字元陣列只用去部分記憶體空間, 所以浪費了很多空間。還好我們可以利用new 運算子來動態地配置正確的記憶體空間。 動態記憶體配置和類別 對記憶體配置,C++ 採用的策略是:在程式所需要的記憶體大小,是在執行期 決定而非編譯期。C++ 使用 new 和 delete 來取得記憶體的動態控制權,很不幸的, 在類別中使用這些運算子會產生一些新的程式設計問題,接下來就來討論這些問題。 靜態的類別成員及其範例 在看 new 和delete 的範例前,先介紹String 類別中新的儲存類型:靜態類別成員。 這類別會存一個指向字串的指標和一個表示字串長度的值。為了能從 String 類別來 看 new ,delete 及靜態類別成員是如何運作,所以在建構函數和解構函數被呼叫時將 顯示一些訊息。範例程式 11-1 是類別宣告,取名為 strng1.h 是為了避免和標準的函 數檔string.h 產生衝突。 C++ Primer Plus 5/e 中文精華版 範例程式 11-1 strng1.h // strng1.h -- string class definition #ifndef _STRNG1_H_ #define _STRNG1_H_ class String { private: char *str; // pointer to string int len; // length of string static int num_strings; // number of objects public: String(const char * s); // constructor String(); // default constructor ~String(); // destructor // friend function friend ostream operator(ostream os, const String st); }; #endif 此宣告中要注意兩件事。首先 str 的資料型態是用 char 指標而非 char 陣列,代 表在類別宣告時並未配置空間予字串,而須在建構函數中利用 new 為字串配置空 間,如此才能避免受限於事先定義的字串大小。 第二,定義成員 num_strings 為靜態的儲存類別。此類別有一特殊性質,不管產 生多少個物件,程式只產生一個靜態類別的變數,意思是靜態成員為該類別的所有 物件所共用,好比全家人共用一個電話號碼。假設產生了 10 個 String 物件,分別有 10 個 str 及 len ,但只有一個共用的num_strings ,如圖11-1 所示。num_strings 記錄此 程式產生的物件個數。 範例程式 11-2 為類別 String 的實作。 範例程式 11-2 string1.cpp // strngs1.cpp -- String

文档评论(0)

jiayou118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档