#include<iostream>
#include<cstring>
using namespace std;
char* p=nullptr;
class String
{
private:
char* pStr;
int size;
public:
String(const char* pn = nullptr);
~String();
String(const String& S);
void set(const char* pn);
String operator+(const String& S);
bool operator<(const String& S)const;
friend ostream& operator<<(ostream& out, const String& S);
friend istream& operator>>(istream& in, String& S);
};
String::String(const char* pn)
{
if (pn)
{
pStr = new char[strlen(pn) + 1];
strcpy_s(pStr, strlen(pn) + 1, pn);
}
else
{
pStr = new char[1];
*pStr = '\0';
}
size = strlen(pStr);
}
String::~String()
{
if(pStr)
delete[]pStr;
}
String::String(const String& S)
{
size = S.size;
if (S.pStr)
{
pStr = new char[strlen(S.pStr) + 1];
strcpy_s(pStr, strlen(S.pStr) + 1, S.pStr);
}
else
{
pStr = new char[1];
*pStr = '\0';
}
}
void String::set(const char* pn)
{
delete[]pStr;
pStr = new char[strlen(pn) + 1];
strcpy_s(pStr, strlen(pn) + 1, pn);
size = strlen(pStr);
}
String String::operator+(const String& S)
{
if (p)
delete[]p;
p = new char[strlen(pStr) + strlen(S.pStr) + 1];
strcpy_s(p, strlen(pStr)+1,pStr);
strcat_s(p, strlen(pStr) + strlen(S.pStr) + 1, S.pStr);
return String(p);
}
bool String::operator<(const String& S)const
{
return (size < S.size);
}
ostream& operator<<(ostream& out, const String& S)
{
out << S.pStr ;
return out;
}
istream& operator>>(istream& in, String& S)
{
in >> S.pStr;
return in;
}
int main()
{
String s1, s2("hello"), s3;
cin >> s1;
cout << s1 << endl;
cout << s1+s2<< endl;
if (p)
delete[]p;
}
>>运算符重载会出错,应该怎么改
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- Lee_Chill 2023-03-18 16:58关注
在 operator>> 函数中,输入的字符串长度可能超过 String 对象内部指针所指向的内存块的长度,从而导致内存溢出。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 问题遇到的现象和发生背景 360导航页面千次ip是20元,但是我们是刷量的 超过100ip就不算量了,假量超过100就不算了 这是什么逻辑呢 有没有人能懂的 1000元红包感谢费
- ¥30 计算机硬件实验报告寻代
- ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
- ¥15 用C语言判断命题逻辑关系
- ¥15 原子操作+O3编译,程序挂住
- ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
- ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
- ¥15 AD9910输出波形向上偏移,波谷不为0V
- ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
- ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘