永发信息网

定义一个类MyString

答案:1  悬赏:40  手机版
解决时间 2021-04-21 14:26
  • 提问者网友:趣果有间
  • 2021-04-20 23:18

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

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

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

最佳答案
  • 五星知识达人网友:猎心人
  • 2021-04-21 00:22

#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)
{
cout << "调用无参构造函数" << endl;
szBuf = new char[stSize];
}


MyString::MyString(char* buf): stSize(256)
{
cout << "调用参数为字符指针的构造函数" << endl;
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)
{
cout << "调用拷贝构造函数" << endl;
if (stSize-1 < str.stLen)
{
stSize = str.stLen + 1;
}
szBuf = new char[stSize];
strcpy(szBuf, str.szBuf);
stLen = strlen(szBuf);
}


MyString::~MyString()
{
cout << "调用析构函数" <<endl;
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();
cout << endl;

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

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

delete str1;
return 0;
}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯