C++ 小问题,不知道为什么会出现这样的问题
#include <string>
#include <iostream>
using namespace std;
class X
{
private:
int len;
char * ptr;
public:
~X()
{
delete ptr;
}
int GetLen()
{
return len;
}
char * GetPtr()
{
return ptr;
}
X & Set(char *);
X & Cat(char *);
X & Copy(X &);
void Print();
};
X & X::Set(char * pc)
{
len = strlen(pc);
ptr = new char[len + 1];
strcpy(ptr, pc);
return * this;
}
X & X::Cat(char * pc)
{
len += strlen(pc);
strcat(ptr, pc);
return * this;
}
X & X::Copy(X & x)
{
Set(x.GetPtr());
return * this;
}
void X::Print()
{
cout << len << "\t" << ptr << endl;
}
int main(void)
{
X xobj1;
xobj1.Set("abcd");//xobj1.Set("abcd").Cat("efgh");
xobj1.Print();
cin.get();
return 0;
}
[解决办法]
#include <string>
#include <iostream>
using namespace std;
class X
{
private:
int len;
char * ptr;
public:
//1
X():len(0), ptr(NULL){}
~X()
{
delete []ptr;
}
int GetLen()
{
return len;
}
char * GetPtr()
{
return ptr;
}
X & Set(char *);
X & Cat(char *);
X & Copy(X &);
void Print();
};
X & X::Set(char * pc)
{
//2
len = strlen(pc);
delete [] ptr;
ptr = new char[len + 1];
strcpy(ptr, pc);
return *this;
}
X & X::Cat(char * pc)
{
//3
len += strlen(pc);
char *p = ptr;
ptr = new char[len + 1];
strcpy(ptr, p);
strcat(ptr, pc);
ptr[len] = 0;
delete []p;
return * this;
}
X & X::Copy(X & x)
{
Set(x.GetPtr());
return * this;
}
void X::Print()
{
cout << len << "\t" << ptr << endl;
}
int main(void)
{
X xobj1;
xobj1.Set("abcd").Cat("efgh");
xobj1.Print();
//cin.get();
return 0;
}