因为想试着用类型转换运算符,即为了使cout<<s1;//(s1是MyString类)能通过,使用了operator char*(){return p;},希望届时输出的就是成员变量字符串p,虽然dev c++运行完全没有问题,但是openjudge一直显示runtime error。
MyString(const MyString & s) {
if( s.p) {
p = new char[strlen(s.p) + 1];
strcpy(p,s.p);
}
else
p = NULL;
}
void Copy(const char * s){
if(p) delete [] p;
if( s) {
p = new char[strlen(s) + 1];
strcpy(p,s);
}
else
p = NULL;
}
MyString & operator= (const char * s) {
if(p) delete [] p;
if( s) {
p = new char[strlen(s) + 1];
strcpy(p,s);
}
else
p = NULL;
}
MyString & operator= (const MyString & s) {
if(p) delete [] p;
if( s.p) {
p = new char[strlen(s.p) + 1];
strcpy(p,s.p);
}
else
p = NULL;
return *this;
}
operator char* () {return p;}
所以最终还是用了重载输入输出流运算符,不过仍然想不明白之前那样为什么是错的呢。