C++ String复制操作

class_fly07 2009-11-25 11:40:26
小弟有个问题想问各位大虾,我已经编写好了一个MyString类,想其他的函数功能都已经实现么,现在还想实现一个“支持复制操作,左操作数字符数数组不能容纳右操作数字符数数组时自动释放并重新分配内存”功能的函数,请问个位应该怎么操作,这个好像涉及到了动态分配内存的问题。。
这是头文件(2个)
1 MyString.h
#ifndef _MYSTRING_H_
#define _MYSTRING_H_

#include<iostream>
#include<string>
#include "StatusCode.h"
using namespace std;

/*类定义部分*/
class MyString{
private:
char* szBuf;//字符数组指针
size_t stSize;//字符数组大小
size_t stLength;/*字符串长度这里我把stlen改为stlength*/
string S;
public:
static int objectcount;
MyString();
~MyString();
Init();
void Init(char* tempBuf,int tempsize,int templength);
StatusCode InittheString(string tempS);
/*这里定义字符串复制函数*/


};

int MyString::objectcount=0;

MyString::MyString(){
objectcount++;
}

MyString::~MyString(){
objectcount--;
cout<<"现在调用~MyString()函数并且释放相应的内存单元!"<<endl;
}

MyString::Init(){
*szBuf=NULL;
stSize=0;
stLength=0;
}

void MyString::Init(char* tempBuf,int tempsize,int templength){
szBuf=tempBuf;
stSize=tempsize;
stLength=templength;
}


StatusCode MyString::InittheString(string tempS){
if(tempS.length()==0)
return OUTOFRANGE;
else{
S.assign(tempS);
return SUCCESS;
}
}
#endif
2 StatusCode.h
#ifndef _STATUSCODE_H_
#define _STATUSCODE_H_

enum StatusCode {SUCCESS,UNDER_FLOW,OUTOFRANGE};
#endif

这个是.cpp文件
#include "MyString.h"
void main(){
cout<<"是不是现在就开始?(Y/N)"<<endl;
char ch;
cin>>ch;
if(ch=='Y'){
int count=0;
cout<<"请输入需要进行处理的字符串"<<endl;
string tempstring;
cin>>tempstring;
if(ch=='Y'){
MyString object1;
object1.InittheString(tempstring);
cout<<"你输入的字符串是:"<<tempstring<<endl;
cout<<"此时你的对象数目是:"<<object1.objectcount<<"个"<<endl;
}
}
else
return ;
}
...全文
1368 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gcc1987 2009-11-26
  • 打赏
  • 举报
回复
看一下
lori227 2009-11-26
  • 打赏
  • 举报
回复
char* szBuf 这个字符指针必须是类中new出来的 不能依靠外部...
内存不够 就delete以前的 再new一个更大的来保存字符串
cattycat 2009-11-26
  • 打赏
  • 举报
回复
c++ string的实现复制就是先检查是不是自赋值,不是的话删除原来的,再分配要复制的字符串大小内存。

string & operator=(const string &b)
{
if(this==b)
return this;
delete _str; //删除原来的字符缓冲
_str=strcpy(new(b.size+1),b.c_str());
return this;
}

大概就是这样的,把这个实现为类成员函数。
macrojj 2009-11-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lori227 的回复:]
char* szBuf 这个字符指针必须是类中new出来的 不能依靠外部...
内存不够 就delete以前的 再new一个更大的来保存字符串
[/Quote]

是啊。
wind_breez 2009-11-26
  • 打赏
  • 举报
回复
Init(char* tempBuf,int tempsize,int templength)这样的操作,
szBu在构造里申请一个一个预设的空间, 如果tempsize大于预设的空间,就realloc一下,然后memcpy一下。string类应该自己有自己的空间。然后构造和析构里来管理自己的申请和释放。
stardust20 2009-11-25
  • 打赏
  • 举报
回复
google 深拷贝 c++

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧