作者theone777 (你想要什麼)
看板C_and_CPP
標題[問題] Class宣告問題
時間Sat Feb 8 16:26:49 2014
開發平台(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)
推 EdisonX:第一行就打錯了. 話說幹嘛堅持要四種不同解決方案 02/08 17:29
推 cgcheng:這個class感覺很怪 02/08 17:58
→ CumCumCum:unsigned int? 而且存取和解構都不檢查 指標T 02/08 18:10
→ CumCumCum:應該也要檢查 欲存取的元素是否超過上限 02/08 18:11
→ EdisonX:1. ~Array() delete 前需判斷 size > 0 是否成立。 02/08 19:06
→ EdisonX:2. 這種 class 一定要複載 operator = ,不然做 assigned 02/08 19:06
→ EdisonX: 後 , 解構時一定會死 (對 Data 釋放兩次)。 02/08 19:06
→ EdisonX:3. 因為有 operator = ,所以還要再做 02/08 19:06
→ EdisonX: Array(const Array & rhs); 建構子 02/08 19:06
→ EdisonX:4. setData, getData 都沒檢查邊界 02/08 19:07
→ EdisonX:5. new 失敗之情況沒處理,要處理好的話大概不是現在學的 02/08 19:07
推 littleshan:delete null pointer 是安全的 02/09 14:17
→ littleshan:new失敗的情況下,在這個例子中安全,因為ctor沒跑完 02/09 14:17
→ littleshan:視為物件未產生,因此不會去跑dtor 02/09 14:18
→ littleshan:不過在operator=與copy ctor之中就沒那麼單純了 02/09 14:19