day11pm--拷贝构造函数(深拷贝、浅拷贝)
//随时调整长短是数组,数据不会丢 //拷贝构造函数 /*例子函数头的表示方法 @函数名称: 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(); }