永发信息网

定义类MyString

答案:2  悬赏:80  手机版
解决时间 2021-07-20 19:16

定义一个类MyString
成员变量 字符数组指针:char*szBuf(动态)
字符数组大小:size_t stSize(256)
字符串长度(可选):size_t stLen
要求:1.创建类类型对象时 自动分配内存(new char[])
2.释放类类型对象时 自动释放内存
3.支持复制操作 左操作数字符数数组不能容纳右操作数字符串时 自动释放并重新分配内存(delete[] new char[]

strcpy)
4.添加必要函数 并在函数入口输入标识 便于观察函数调用情况

各位大哥大姐帮帮忙啊 今天交 愁死偶了o(︶︿︶)o

最佳答案

在函数入口处添加标识这步工作你就自己加上行了,大概写了一下这程序:


#include <iostream>
#include <cstring>
using namespace std;


class MyString
{
public:
MyString();
MyString(char*);
MyString(const MyString&);
~MyString();
size_t length();
size_t size();
char at(unsigned);
MyString& operator =(const MyString&);
void print();
friend MyString operator +(const MyString&, const MyString&);

private:
char* szBuf;
size_t stSize;
size_t stLen;
};


MyString::MyString(): stSize(256), stLen(0)
{
szBuf = new char[stSize];
}


MyString::MyString(char* buf): stSize(256)
{
if (stSize-1 < strlen(buf))
{
stSize = strlen(buf) + 1;
}
szBuf = new char[stSize];
strcpy(szBuf, buf);
stLen = strlen(szBuf);
}


MyString::MyString(const MyString& str): stSize(256)
{
if (stSize-1 < str.stLen)
{
stSize = str.stLen + 1;
}
szBuf = new char[stSize];
strcpy(szBuf, str.szBuf);
stLen = strlen(szBuf);
}


MyString::~MyString()
{
if (szBuf != NULL)
{
delete[] szBuf;
}
}


size_t MyString::length()
{
return stLen;
}


size_t MyString::size()
{
return stSize;
}


char MyString::at(unsigned index)
{
if ((szBuf != NULL) && (index < stLen))
{
return szBuf[index];
}
return 0;
}


MyString& MyString::operator=(const MyString& str)
{
if (stSize < str.stLen + 1)
{
delete[] szBuf;
stSize = str.stLen + 1;
szBuf = new char[stSize];
}
memset(szBuf, 0, stSize);
strcpy(szBuf, str.szBuf);
return *this;
}


void MyString::print()
{
cout << this->szBuf;
}


MyString operator+(const MyString& str1, const MyString& str2)
{
char *buf;
int len;

len = str1.stLen + str2.stLen + 1;
buf = new char[len];
strcpy(buf, str1.szBuf);
strcat(buf, str2.szBuf);
MyString str(buf);
delete[] buf;

return str;
}


int main()
{
MyString* str1;
str1 = new MyString("abcdefe");
str1->print();

MyString str2(*str1);
str2 = *str1 + str2;
cout << endl;
str2.print();
cout << endl;

for (int i = 0; i < str1->length(); i++)
{
cout << str1->at(i);
}

delete str1;
return 0;
}

全部回答
看看string类的实现,照着改改就行了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
老师是什么样的职位?
果实多多,打一字!
假如你一晚上不睡觉,你认为你会在干什么?
巴西红耳龟放在什么地方好?
天天向上里介绍高尔夫汽车的英文插曲是什么
一篇英语文章:Shanghai expo brings me a lo
WE8最新球员补丁
网上查座余额怎么查
越狱兔30集只有还有出来了吗
求again动漫MTY的中文歌词
阳新县黄石大众美食馆地址在哪,我要去那里
狂战士用什么剑比较好
百度空间自定义皮肤
卓依婷的儿子多大了
姓何、想个名?
推荐资讯
But what is worth nothing is colleges shou
现在有没有什么新歌
中国联通炫彩短信
笔记本背包什么牌子好,什么品牌的笔记本电脑
有哪些地方是说客家话的
请问QQ空间被屏遮了该如何处理
女孩喜欢男孩,而男孩却喜欢上女孩的好朋友,
怎样设置电脑上的软件开机自动更新?
最近啥网游好耍
天龙八部7颗4体其他满三得多少RMB、?
我想变成奥特曼怎么弄?
梦幻诛仙医生?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?