您的位置:首页 > 编程语言 > C语言/C++

c++;jstring类 写时拷贝 简单实现

2015-12-03 13:24 447 查看
#include<iostream>//头文件
#pragma once

using namespace std;
class String
{
private:
char* _string;
int*  _strCount;
size_t _size;
size_t _capacity;
public:
String(const char* str = "\0");
String(const String& str);
~String();
char& operator[](int index);
char* GetChar();
void operator =(String & str);
};

#include<iostream>//函数文件
#include"string.h"

using namespace std;
String::String(const char* str)
{
_string = new char[strlen(str) + 5];
_strCount=(int*)_string ;
_string = _string + 4;
strcpy(_string, str);
*_strCount = 1;
_size = (strlen(str));
_capacity = _size + 1;
}

String::String(const String& str)
{
_string = str._string;
++*(str._strCount);
_strCount = str._strCount;
_size = str._size;
_capacity = str._capacity;
}

String::~String()
{
if (*_strCount > 1)
--(*_strCount);
else
delete[] _strCount;
}

char& String:: operator[](int index)
{
if (*_strCount != 1)
{
--*_strCount;
char* tmp = new char[strlen(_string) + 5];
strcpy(tmp + 4, _string);
_strCount = (int*)tmp;
*_strCount = 1;
_size = strlen(_string);
_capacity = _size + 1;
_string = tmp + 4;
}
return _string[index];
}

char* String::GetChar()
{
return _string;
}

void String::operator =(String & str)
{
_string = str._string;
++*(str._strCount);
_strCount = str._strCount;
_size = str._size;
_capacity = str._capacity;

}

#include<iostream>//主函数  测试文件
#include"string.h"

using namespace std;
void test1()
{
String s1("woshishuaige");
String s2(s1);
String s3;
cout << s1.GetChar() << endl;
cout << s2.GetChar() << endl;
cout << s3.GetChar() << endl;
s2[0] = 1;
cout << s2.GetChar() << endl;

}

int main()
{
test1();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: