Code Bye

为什么在类外的重载+函数中不能定义该类对象


#include<iostream>
#include<cstdlib>
using namespace std;
size_t howlongl(char a)
{   char* p=&a;
int i=0;
while(*p++)i++;
return i;
}
class cstring
{
private:
size_t len;
char* head;
char  mchar;
char* dmchar;
public:
//constructors
cstring();
cstring(char ){}
cstring(const char*ch){_strcpy(ch,howlong(ch));/*cout<<“调用了构造函数”<<endl;*/}
cstring(const cstring& ch){len=ch.len;head=ch.head;mchar=ch.mchar;}
cstring(cstring&&); //optional
//destructor
~cstring(){len=0;delete[]head;delete[]&mchar;}
//methods
size_t length() const{return len;};
bool is_null() const;
void nullify(); //set string to null
size_t howlong(const char* a)
{
int i=0;
while(*a++)i++;
len=i;
return len;
}
void _strcpy(const char* b,size_t len)
{
head=new char[len+1];
for(size_t i=0;i<=len;i++)
{
head[i]=b[i];
}
}
cstring substr(size_t begin_position/* from 0 */, size_t char_num/* >=1 */)
{
size_t i=0;
char mstring[char_num+1];
for(i=0;i<=char_num;i++)
{
mstring[i]=head[i+begin_position];
}
mstring[i]=”\0″;
return mstring;
}
cstring& operator=(const char r)
{
this->mchar=r;
return *this;
}
cstring& operator=(const cstring& r)
{
this->head=r.head;
return *this;
}
/*cstring operator[](size_t i)
{
try{
if(i>this->len)
{
throw”out_of_range”;
}
}
catch(…){
cout<<“out_of_range”<<endl;
exit(0);}
this->dmchar=new char[2];
this->dmchar[1]=this->head[i];
this->dmchar[2]=”\0”;
return mchar;
}*/
cstring& operator+=( char b)
{   char*p =&b;
size_t l=this->len+howlongl(b);
for(size_t i=this->len;i<=l;i++)
{
this->head[i]=p[i-this->len];
}
return *this;
}
friend size_t print(const cstring& mstr) //print the string. return
{
cout<<mstr.head<<endl;
return mstr.len;
}
friend cstring operator+(const cstring& r1,const cstring& r2);
friend ostream& operator<<(ostream& os,const cstring& c);
};
cstring operator+(const cstring& r1,const cstring& r2)
{
cstring t;
t.head=new char[t.len+1];
t.len=r1.len+r2.len;
for(size_t i=0;i<=r1.len;i++)
{
t.head[i]=r1.head[i];
}
for(size_t j=r1.len+1;j<=t.len;j++)
{
t.head[j]=r2.head[j-r1.len-1];
}
return t;
}
ostream& operator<<(ostream& os,const cstring& c)
{
os<<c.head<<endl;
return os;
}
int main()
{
cstring s1(“Harry potter”), s2(“Potterand the Philosopher”s Stone”);
//s1[6] = “p”;
cstring s3(s1);
s3 +=” “;
cstring s4;
s4 = s3 + s2.substr(7, 9);
std::cout << s1;
return 0;
}
解决方案

40

cstring(){};

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么在类外的重载+函数中不能定义该类对象