課後輔導.pptVIP

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

練習四:多載串流插入運算子 請於類別中多載串流插入運算子 請撰寫簡單的main函式,編譯你的類別並測試物件的建立是否正確(把呼叫Output()的部分改用運算子的方式輸出)。 例: CppString A(“hello”); CppString B(“world”); cout B endl; B = A; cout B endl; 2008/4/22 課後輔導 實作拷貝建構子與多載運算子 課程內容 本週實習程式講解 拷貝建構子 多載運算子 賦值運算子(=) 串流插入運算子() 實習程式講解 本週實習程式 請實作一個類別CppString,用以儲存字串並操作字串相關運算,private成員資料中請以char *來實作此類別。 在類別中實作以下成員函數: 建構子、解構子與拷貝建構子 多載運算子「operator==」 多載運算子「operator=」 length():回傳字串長度。 多載串流擷取運算子「」 多載串流插入運算子「」 練習一:建立類別 請建立類別設計的架構 成員變數: 依題意,加入一個指向字元陣列的指標變數,另外,需要額外的變數以記住陣列的大小 成員函式 預設建構子 以輸入的字串作為初始值,欲設為空字串;例如: CppString(const char *s = “”); 解構子 測試函式Output:用以列印成員變數,檢查資料是否正確 請撰寫簡單的main函式,編譯你的類別並測試物件的建立是否正確。 注意char*型態的字串處理需加入標頭檔cstring 拷貝建構子 Shallow Copy 如果類別沒有給予拷貝建構子或多載賦值運算子(=),其預設的物件拷貝是將其成員內容逐一的複製。 範例: class BigObj { char buf[100]; int i; }; void main() { BigObj A, B; A = B; } char buf[100] int i 物件B 物件A Shallow Copy 如果當類別中有成員變數是指標變數的時候,考慮以下類別: class BigObj2 { public: BigObj2(int s=100) { capacity = (s 0)? s : 100; buf = new char[capacity]; } ~BigObj2() { delete [] buf; } private: int capacity; char *buf; }; Shallow Copy 在預設的情況下,兩個指標變數的拷貝僅僅拷貝了記憶體位址,非針對實體的資料進行拷貝。 30000 char *buf int capacity 物件B 38000 物件A Shallow Copy 30000 38000 30000 Shallow Copy的問題 考慮以下程式碼將發生的情形: func()接受一個物件做為參數,再將此物件回傳。 main函式宣告兩個物件A與B,並將A傳入func後,以B物件來接受其回傳值。 BigObj2 func(BigObj2 X) { return X; } void main() { BigObj2 A, B; B = func(A); } ? A X B main() main() func() 暫存的物件T Copy Copy Copy operator= Shallow Copy的問題 30000 char *buf int capacity 物件T 38000 物件B 30000 38000 30000 Dangling Pointer Memory Leak 自訂拷貝建構子與多載賦值運算子 使用時機 當成員變數含有指標變數的時候,最好提供自訂以下函式: 預設建構子 不管什麼時機,都盡量提供一個預設建構子 自訂的拷貝建構子 多載賦值運算子(operator=) 自訂拷貝建構子 呼叫時機: 從一個既存物件A中建立一個新的物件,且此物件為A的複本。 函式原型: 沒有回傳值 一定只有一個參數,例: const BigObj2 一定是一個const的參考指向傳入的物件;代表該傳入的物件不可被修改。 自訂拷貝建構子 class BigObj2 //因篇幅有限故直接寫入類別中,實作時請將函式原型 { //與實作分開 public: … BigObj2(const BigObj2 source)

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档