C++ 类模板的使用:动态数组的实现
类模板定义
template<typename 模板参数1,typename 模板参数2,....>
class 类名
{
};
实验目的:
1、掌握类模板定义的一般格式
2、掌握类模板数据成员定义与成员函数定义格式及其使用(含类模板外定义成员函数)
实验内容:
1、定义MyArray类,其数据成员有:数组长度length、指向动态数组的指针p
2、定义相关构造函数、析构函数
3、定义display()函数显示数组中的数据
4、定义modifyArray()函数修改数组的长度和元素,要求函数定义在类体之外
具体如下:
步骤1、
int main()
{
MyArray<int> a(10,6);//在数组a中放入10个数字6
a.display();
MyArray<char> b(20,'A');//在数组b中放入20个字符'A'
b.display();
}
步骤2:
int main()
{
MyArray<int> a(10,6);//在数组a中放入10个数字6
a.display();
a.modifyArray(20,8);//修改数组a的长度,放入20个数字8
a.display();
MyArray<char> b(20,'A');//在数组b中放入20个字符'A'
b.display();
b.modifyArray(40,'c');//修改数组b的长度,放入40个字符'c'
b.display();
}
步骤3:
char c[10]={'a','b','c','d','e','f','g'};
b.modifyArray(10,c);//把数组c中的字符放入到数组b中
b.display();
#include<iostream>
using namespace std;
template<class T>
class MyArray
{
private:
T *p;
int length;
public:
MyArray(int n,T a)
{
length=n;
p=new T[n];
for(int i=0;i<length;i++)
{
p[i]=a;
}
}
~MyArray()
{
cout<<"NO"<<endl;
delete []p;
length=0;
p=NULL;
}
void display()
{
cout<<length<<endl;
for(int i=0;i<length;i++)
{
cout<<p[i]<<" ";
}
cout<<endl;
}
//在类模板外定义成员函数
void modifyArray(int n,T a);
void modifyArray(int n,T *a);
};
template<class T>
void MyArray<T>::modifyArray(int n,T a)
{
delete []p;
length=0;
p=NULL;
length=n;
p=new T[n];
for(int i=0;i<n;i++)
{
p[i]=a;
}
}
template<class T>
void MyArray<T>::modifyArray(int n,T *a)
{
delete []p;
length=0;
p=NULL;
length=n;
p=new T[n];
for(int i=0;i<length;i++)
{
p[i]=a[i];
}
}
int main()
{
MyArray<int> a(10,6);
a.display();
a.modifyArray(20,8);
a.display();
MyArray<char> b(20,'A');
b.display();
b.modifyArray(40,'c');
b.display();
char c[10]={'a','b','c','d','e','f','g','h','i','j'};
b.modifyArray(10,c);
b.display();
return 0;
}