//随时调整长短是数组,数据不会丢
//拷贝构造函数
/*例子函数头的表示方法
@函数名称: strcpy
函数原型: char* strcpy(char* str1,char* str2);
函数功能: 把str2指向的字符串拷贝到str1中去
函数返回: 返回str1,即指向str1的指针
参数说明: */
#include<iostream>
using namespace std;
class Array{
char *p;
int len;
public:
Array(int n):len(0),p(NULL){
resize(n);
}
void resize(int n){
char* q=new char[n];///new 新长度 数组
int min=(n<len?n:len);
if (p!=NULL)
{
for(int i=0;i<min;i++)
q[i]=p[i];
delete[] p;
}
p=q;
for(int i=min;i<n;i++)
p[i]='\0';
len=n;
}
int size(){
return len;
}
void set(int index,char value){
p[index]=value;
}
char get(int index){
return p[index];
}
~Array(){
if(p!=NULL){delete[] p;
p=NULL;}
}
void fill(char start,int skip){
for (int i=0;i<len;i++)
{
p[i]=start+i*skip;
}
}
void show(){
for (int i=0;i<len;i++)
cout<<p[i];
cout<<endl;
}
/拷贝构造函数/---深拷贝
Array(const Array& o):len(o.len){
p= new char[len];
for (int i=0;i<len;i++)
p[i]=o.p[i];
}
};///只是复制是数据
int main(){
Array a1(10);
/*Array a2(20);
cout<<"input chars(ends by $):";
for (int i=0;;i++)
{char ch;
cin>>ch;
if(ch=='$')
break;
else if(i+1>a1.size())
a1.resize(i+10);
a1.set(i,ch);
}
for (int i=0;i<a1.size();i++)
{
cout<<a1.get(i);
}
cout<<endl;*/
a1.fill('a',2);
a1.show();
Array a2(a1);//a1 初始化 a2
a2.fill('A',1);
a2.show();
a1.show();
}