模板類之(陣列)

2021-05-23 22:50:30 字數 988 閱讀 4970

一、陣列類

//shuzu.h

二、應該要注意的幾個問題:

1、為什麼拷貝建構函式要這麼複雜?為什麼不是簡單的賦值?

——這涉及到深拷貝和淺拷貝的問題。簡單的對物件成員賦值只能實現淺拷貝,淺拷貝會造成記憶體訪問的安全性問題(同一塊記憶體被釋放兩次)

2、為什麼有些函式返回值是物件的引用,改為返回物件值可以嗎?

——如果乙個函式的返回值是乙個物件值,它被認為是乙個常量,當然不能成為左值。如果返回引用,引用的實質就是變數(物件)的別名,通過變數(物件)的別名當然可以改變變數(物件)的值。

eg:int a,b = 5;

(a=b)++;

這在c++中是允許的,執行後a的值是6,因此運算子「[ ]」和運算子「=」返回的都是引用型別。

另外,c++語法還規定,「=」,「[ ]」,「->」,「( )」都只能過載為成員函式,而且「=」運算子函式是不能被繼承的。

所以過載運算子和運算子=都返回引用。

3、過載指標運算有必要嗎?

看乙個程式:

這裡函式read的第乙個形參是int *型別,而陣列名a也是乙個int型的指標常量,型別恰好是匹配的。但是如果希望像使用普通陣列一樣使用array類的物件,將上述main函式改為如下:

這裡形參和實參不同,編譯系統會嘗試進行自動型別轉化,將類物件名a轉換成形參的int*。由於a是自定義的物件,因此無法實現這一轉換,因此需要我們自行編寫過載的指標型別轉換函式。

4、為什麼轉換指標函式體內有return語句,但是函式卻沒有返回值,連void都沒有?

——這是c++語法規定:過載型別轉換運算子時,不允許指定返回值型別(也不要寫void)

三、應用上面的array類:

求範圍在2~n之間的質數,n在程式執行時由鍵盤輸入

陣列類模板

問題及描述 檔名稱 test.cpp 作者 邱凱 完成日期 2016年5月31號 版本號 v6.0 問題描述 陣列類模板 輸入描述 輸入資料 輸出描述 輸出答案 include include include using namespace std template class array temp...

陣列類模板

檔名稱 3.cpp 完成日期 2016年 6 月 15日 版本號 v1.0 專案 陣列類模板 在陣列類的基礎上,將之改造為類模板,以使陣列中可以儲存各種型別的資料。template 陣列類模板定義 class array include includeusing namespace std temp...

陣列類模板

通過例子,了解如何封裝動態陣列類,注意看注釋!array.h ifndef array h define array h include template class array 在陣列中希望容納任何型別元素的陣列 建構函式,格式 template網域名稱 函式名 形參 templatearray ...