[問題] Class宣告問題

看板C_and_CPP (C/C++)作者 (你想要什麼)時間12年前 (2014/02/08 16:26), 編輯推噓3(3012)
留言15則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2005 with C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NULL 問題(Question): 1. 這個class有什麼問題? 2. 提出4種不同的解決方法 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) Typedef<typename T> Class Array { public: Array(unsigned arraySize): Data(0), size(arraySize) { if(size > 0)Data = new T[size]; } ~Array() { delete []Data; } Void setData(int i, T temp) { Data[i] = temp; } T getData(int i)const { return Data[i]; } private: unsigned size; T *Data; }; 補充說明(Supplement): 我知道這個問題對各位來說很基本, 但原PO對class的東西完全是個newbie @@ 原PO不是學生族, 所以這問題不是作業也不是考試題目之類的, 單純就一個對class外行的人想初學, 懇請各位大大鞭小力點, 並惠予賜教, 感恩!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.32.35 ※ 編輯: theone777 來自: 122.117.32.35 (02/08 16:36)

02/08 17:29, , 1F
第一行就打錯了. 話說幹嘛堅持要四種不同解決方案
02/08 17:29, 1F

02/08 17:58, , 2F
這個class感覺很怪
02/08 17:58, 2F

02/08 18:10, , 3F
unsigned int? 而且存取和解構都不檢查 指標T
02/08 18:10, 3F

02/08 18:11, , 4F
應該也要檢查 欲存取的元素是否超過上限
02/08 18:11, 4F

02/08 19:06, , 5F
1. ~Array() delete 前需判斷 size > 0 是否成立。
02/08 19:06, 5F

02/08 19:06, , 6F
2. 這種 class 一定要複載 operator = ,不然做 assigned
02/08 19:06, 6F

02/08 19:06, , 7F
後 , 解構時一定會死 (對 Data 釋放兩次)。
02/08 19:06, 7F

02/08 19:06, , 8F
3. 因為有 operator = ,所以還要再做
02/08 19:06, 8F

02/08 19:06, , 9F
Array(const Array & rhs); 建構子
02/08 19:06, 9F

02/08 19:07, , 10F
4. setData, getData 都沒檢查邊界
02/08 19:07, 10F

02/08 19:07, , 11F
5. new 失敗之情況沒處理,要處理好的話大概不是現在學的
02/08 19:07, 11F

02/09 14:17, , 12F
delete null pointer 是安全的
02/09 14:17, 12F

02/09 14:17, , 13F
new失敗的情況下,在這個例子中安全,因為ctor沒跑完
02/09 14:17, 13F

02/09 14:18, , 14F
視為物件未產生,因此不會去跑dtor
02/09 14:18, 14F

02/09 14:19, , 15F
不過在operator=與copy ctor之中就沒那麼單純了
02/09 14:19, 15F
文章代碼(AID): #1IzUfB2u (C_and_CPP)
文章代碼(AID): #1IzUfB2u (C_and_CPP)