<pre name="code" class="cpp">#include<iostream>
#include<cstring>
using namespace std;
class A
{
private:
char*a;
public:
A(char*aa)
{
a=new char[strlen(aa)+1];
strcpy(a,aa);
}
~A()
{
delete[]a;
}
void output()
{
cout<<a<<endl;
}
};
int main()
{
A a("good moring,code mokeys");
a.output();
A b("good moring,codes");
b.output();
return 0;
}
去掉 a=new char[strlen(aa)+1];后程序提示错误,没有为a指针指向的地址分配大小,在a数据成员的后边加1是因为字符串需要以'\0'结尾。
若指针a不是指向字符,也需要加1作为结尾。
增加复制构造函数
#include<iostream>
#include<cstring>
using namespace std;
class A
{
private:
char*a;
public:
A(char*aa)
{
a=new char[strlen(aa)+1];
strcpy(a,aa);
}
A(A &p)
{
a=p.a;
}
~A()
{
delete[]a;
}
void output()
{
cout<<a<<endl;
}
};
int main()
{
A a("good moring,code mokeys");
a.output();
A b(a);
b.output();
return 0;
}