Re: [問題] 請幫我看看這個程式有什麼問題

作者: kwpn (ITSST)   2014-09-05 13:08:49
※ 引述《bibbo (老逼)》之銘言:
: 不好意思 剛朋友貼2段程式碼給我看 但是小弟功力尚淺 只好上來求救各位大神了
: a.這個class有什麼問題?請提出四種解法
: 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;
: };
: 我只想到是typedef能這樣用嗎?可是也想不出4種解法
1. template關鍵字打錯,打成typedef。
2. copy會有問題,應該要(1)實作copy constructor/copy assignment operator
,或(2)禁止被copy。
3. size未在任何member function被使用(修正前)
,不需要儲存成member data。
4. index的type應該要與size一致
,如程式中size是unsigned,但函式介面傳入的index是int
,若size是超過2147483647,那麼函式呼叫時就無法存取超過這個index的元素。
5. 建構式size若為0,應throw exception
,否則size為0時還是會建立物件成功,使用者會使用一個無效的物件。
6. setData與getData都未檢查輸入的index是否超出array的size
,若超出的話應傳出error,例如throw exception。
7. 若是練習就算了,正式的程式碼不應該要有此class
,直接用std::vector就好了
8. "剛朋友貼2段程式碼給我看",可是只有1段class程式碼
作者: jack710619 (ECLin)   2014-09-07 14:53:00
第八點我笑了

Links booklink

Contact Us: admin [ a t ] ucptt.com