看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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程式碼 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.47.18 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1409893732.A.552.html
jack710619: 第八點我笑了 09/07 14:53