C++菜鸟 求指教 高手请进

MN990628269 2012-07-02 08:41:27
完成一个数组类,模仿MFC中的类CArray的接口.要求写成模板类,模板参数写成一个就行。
拥有以下几个操作:
获得元素数量
判断是否为空
删除所有元素
获得某一下标元素
在末尾添加1个元素
在某个位置插入1个元素
删除某个位置的1个元素
要求:
内存要动态分配并使用new,delete进行分配,释放
完成类以后要做一个简单的测试例子,对操作函数进行测试

题目如上,我的基础几乎为零,所有代码是看完课本后自己敲的,可是就是出不来结果,希望大家帮帮忙,谢啦~~(代码如下)#include<iostream>
using namespace std;
template <class T>
class TArray
{
public:
TArray(int s = 0);
~TArray();
void insert(int nPos, const T& t);
void insert_back(const T& t);
int Get_Num() const
{
return m_nPos;
}
int Get_Size() const
{
return m_nSize;
}
T Get_item(int i) const;
void delete_all();
void delete_item(int i);
void print();
int resize(int length);
private:
int m_nSize;
int m_nPos;
T* m_ptr;
};
template<class T>
TArray<T>::TArray(int s)
{
m_nPos=0;
m_nSize=s;
m_ptr = NULL;
if (m_nSize > 0)
m_ptr=new T[m_nSize];
}

template<class T>
TArray<T>::~TArray()
{
if (m_ptr!=NULL)
delete []m_ptr;
}

template<class T>
void TArray<T>::print()
{
cout<<"Array:(";
for(int i=0;i<m_nPos;i++)
{
cout<<m_ptr[i];
if(i<m_nPos-1)
cout<<",";
}
cout<<")"<<endl;
}

template<class T>
int TArray<T>::resize(int length)//有问题,需要改
{
T * p1;
p1=new T[length];
for(int i=0;i<m_nSize;i++)
p1[i]=m_ptr[i];
if(m_ptr!=NULL)
delete []m_ptr;
m_ptr=p1;
m_nSize = length;
return length;
}
template<class T>
void TArray<T>::delete_all()
{
m_nPos = 0;
m_nSize = 0;
//if (m_ptr!=NULL)
//delete []m_ptr;
}
template<class T>
void TArray<T>::delete_item(int i)
{
if (i>=m_nPos)
{
return ;
}
else
{
for(int j=i;j<m_nPos;j++)
{
m_ptr[j]=m_ptr[j+1];
}
m_nPos--;
}

}

template<class T>
T TArray<T>::Get_item(int i) const
{
return m_ptr[i];
}
template<class T>
void TArray<T>::insert(int nPos, const T& t)//需修改
{
m_nPos++;
if (nPos>=m_nPos||m_nPos>m_nSize)
{
int nNewSize = m_nSize*2;
if (nNewSize<1)
{
nNewSize=1;
}
resize(nNewSize);
for(int j=m_nPos;j>nPos;j--)
m_ptr[j]=m_ptr[j-1];
}
else
{
for(int j=m_nPos;j>nPos;j--)
m_ptr[j]=m_ptr[j-1];
}
m_ptr[nPos]=t;
}

template<class T>
void TArray<T>::insert_back(const T& t)
{
insert(m_nPos, t);
}


void main()
{
int len,length,num;
cin>>len;
TArray<int>A(len);
num=A.Get_Size();
cout<<"数组A的信息如下:\n";
for( int i=0;i<len;i++)
{
A.insert(i,i*10);
}
A.print();
if(len>=num)
{
cout<<"please input the length of array you want:";
cin>>length;
}
if(len!=length)
{
A.resize(length);
for( int i=len;i<length;i++)
{
A.insert(i,i*10);
}
A.print();
}
A.insert_back(123);
A.print();
cout<<"下标为3的元素的值是:";
A.Get_item(3);
cout<<"删除下标为3的元素后:\n";
A.delete_item(3);
A.print();
cout<<"在第一个元素之前插入元素后:\n";
A.insert(1,5);
A.print();
cout<<"元素全部删除后:\n";
A.delete_all();
A.print();
system("pause");
}

...全文
73 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
MN990628269 2012-07-03
  • 打赏
  • 举报
回复
谢谢你哦,我已经找到问题了,呵呵~~
happytengfei 2012-07-02
  • 打赏
  • 举报
回复
最大的问题是insertXXX方法插入的是引用数据,这样会导致TArray<T>类中m_ptr里的数据都是非法的,比较危险。这里没必把参数定义为常量引用类型。

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧