2级C++问题

来源:百度知道 编辑:UC知道 时间:2024/06/27 07:53:59
#include<iostream.h>
#include<cstring>
class Mc
{
char*s;
public:
Mc(const char*s)
{
this->s=new char[strlen(s)+1];
strcpy(this->s,s);
}
Mc(Mc&m)
{
s=new char[strlen(m.s)+1];
for(int i=0;i<strlen(m.s);i++)
s[i]=m.s[strlen(m.s)-1-i];
s[strlen(m.s)]=0;
}
~Mc()
{delete s;}
friend ostream&operator<<(ostream&,Mc&);
};
ostream&operator<<(ostream&os,Mc&c)
{
for(int i=strlen(c.s)-1;i>=0;i--)
os<<c.s[i];
return os;
}
int main()
{
char*p="world wonder";
Mc hay("Hay!");
cout<<Mc(p)<<endl;
cout<<Mc(hay);
return 0;
}
运行结果不是很明白,有没有高手解答啊?

#include<iostream.h>
#include<cstring>
class Mc
{
char*s;
public:
Mc(const char*s)
{ //构选函数把s给this->s
this->s=new char[strlen(s)+1];
strcpy(this->s,s);
}
Mc(Mc&m)
{ //构造函数m.s倒序后赋给this->s
s=new char[strlen(m.s)+1];
for(int i=0;i<strlen(m.s);i++)
s[i]=m.s[strlen(m.s)-1-i];
s[strlen(m.s)]=0;
}
~Mc()
{delete s;}
friend ostream&operator<<(ostream&,Mc&);
};
ostream&operator<<(ostream&os,Mc&c)
{ //重载操作<<把c.s倒序后输出
for(int i=strlen(c.s)-1;i>=0;i--)
os<<c.s[i];
return os;
}
int main()
{
char *p="world wonder";
Mc hay("Hay!");
cout<<Mc(p)<<endl; //先调用Mc(const char*s) 再调用friend ostream&operator<<(ostream&,Mc&);所以是倒序.
cout<<Mc(hay); //先调用Mc(Mc&m) 再调用friend ostream&operator<<(ostream&,Mc&);所以是倒过二次顺序所以还是原