※ 引述《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程式码