①在构造函数中:
sPtr=new char[length]; //!!!!!!!!! 前面不是char * sptr
②delete时:
不要忘了加[ ]
③
//StudybarCommentBegin
#include <iostream>
#include <cstring> // strcpy and strcat prototypes
using namespace std;
class String
{
public:
String( const char * = "" ); // 输出"Conversion (and default) constructor: "
String( const String & ); //输出 "Copy constructor: "
~String(); // 输出"Destructor: "
bool operator==( const String & ) const; // test s1 == s2
operator char*(){ return this->sPtr; }; //转换函数
friend ostream &operator<<( ostream &out, const String &t );
private:
int length; // string length (not counting null terminator)
char *sPtr; // pointer to start of pointer-based string
};
//StudybarCommentEnd
String::String(const char * str)
{
cout<<"Conversion (and default) constructor: "<<str<<endl;
length=strlen(str);
sPtr=new char[length]; //!!!!!!!!! 前面不是char * sptr
for(int i=0;i<length;i++) sPtr[i]=str[i];
}
String::String(const String &t)
{
sPtr=new char[length];
length=t.length;
for(int i=0;i<length;i++) sPtr[i]=t.sPtr[i]; //!!!!!!!!!此时不能直接sPtr=t.sPtr
cout<<"Copy constructor: "<<sPtr<<endl;
}
String::~String()
{
cout<<"Destructor: "<<sPtr<<endl; //!!!!!!!!!!!可作为一个字符串输出,不需要sPtr[i]
delete[] sPtr;
}
bool String::operator==(const String &t) const
{
int k=0;
if(length!=t.length)
{
return 0;
}
else{
for(int i=0;i<length;i++)
{
if (sPtr[i]!=sPtr[i]) k=1;
}
if(k==1) return 0;
else return 1;
}
}
ostream &operator<<( ostream &out, const String &t )
{
for(int i=0;i<t.length;i++)
{
out<<t.sPtr[i];
}
return out;
}
//StudybarCommentBegin
int main()
{
char msg[1000];
cin>>msg;
String a("This"), b(" is "), c(msg);
//Conversion (and default) constructor: This
//Conversion (and default) constructor: is
//Conversion (and default) constructor: good
cout<<a<<b<<c<<endl; //this is good
String A(a),B,C(c); //Copy constructor: This
//Conversion (and default) constructor: ---B
//Copy constructor: good
cout<<A<<B<<C<<endl; //Thisgood
cout <<"A==a is "<< (A==a ) <<endl<<"A==c is "<<(A==c)<<endl; //A==a is 1 A==c is 0
//Destructor: good
//Destructor:
//Destructor: This
//Destructor: good
//Destructor: is
//Destructor: This
}
//StudybarCommentEnd