1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 |
//随时调整长短是数组,数据不会丢 //拷贝构造函数 /*例子函数头的表示方法 @函数名称: 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(); } |
day11pm--拷贝构造函数(深拷贝、浅拷贝),布布扣,bubuko.com
原文:http://www.cnblogs.com/Flyzhcong/p/3624815.html