c++输入运算符重载的问题,

#include<iostream>usingnamespacestd;classsing{public:sing();sing(char*);//带一个参数的构造函数i... #include<iostream>
using namespace std;

class sing
{
public:
sing();
sing(char *);//带一个参数的构造函数
int get(){ return len; }//返回长度
int get()const { return len; }
char* shuchu(){ return str; }//输出字符串
char& operator[](int leng);//重载下标运算符
sing(sing &);//复制构造函数
char operator[](int leng)const;
sing & operator=(const sing &);
friend ostream& operator<<(ostream &d, sing &sd)
{
d << sd.str;
return d;
}
friend istream & operator>>(istream &d, sing &sd)
{
d >> sd.str;
return d;
}
private:
int len;
char * str;
};

char& sing::operator[](int leng)
{
int val = leng;
if (val > len && val < 0)
{
return str[len - 1];
}

else
{
return str[val];
}
cout << "下标运算符";
}
sing::sing()//不带参数的构造函数
{
len = 0;
str = new char[1];
str[0] = '\0';
}
sing::sing(char * p)//带一个参数的构造函数
{
len = strlen(p);
str = new char[len + 1];
for (int i = 0; i < len; ++i)
{
str[i] = p[i];
}
str[len] = '\0';
}
int main(void)
{
sing st("ssssss");

sing st2 = st;
cin >> st2;

cout << st2;

return 0;
}
这个是我作业草稿,有点难看不好意思,我重载的输入运算符》》 输入几个字符没报错,但是一旦输入多了,比如输入10个字符就会报错,是怎么回事求大神
展开
 我来答
xtwgigu2
2015-05-25 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:54
采纳率:0%
帮助的人:76.9万
展开全部
cin >> st2; st2.str所指向的内存空间是有限的。这里只有"ssssss"这么长,所以理论上只要输入超过6个就已经越界了。
870177103
2015-05-24 · TA获得超过522个赞
知道小有建树答主
回答量:486
采纳率:0%
帮助的人:349万
展开全部
sing::sing()//不带参数的构造函数
{
len = 0;
str = new char[1];
str[0] = '\0';
}
更多追问追答
追问
什么意思?
追答
这里只申请0长的字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式