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

C++:模拟实现string类

2016-08-17 19:15 477 查看
#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
#include<string.h>
#include<assert.h>

class String
{
public:
//String()
//  : _pdata(new char[1])
//{
//  *_pdata = '\0';
//}

//

//String(const char* str)
//  : _pdata(new char[strlen(str) + 1])
//{
//  strcpy(_pdata, str);
//}

//或者这样写
String(const char* str = "")
{
assert(str);
_pdata = new char[strlen(str) + 1];
strcpy(_pdata, str);
}

String(const String& rhs)//这里必须是引用,要不然会再次构造rhs
: _pdata(new char[rhs.size() + 1])
{
strcpy(_pdata, rhs.c_str());
}

String& operator=(String rhs) // 这里必须是值传递,不能是引用,要构造一个rhs出来,
{
swap(rhs);
return *this;
}

// C++ 11
String& operator=(String&& rhs)
{
swap(rhs);
return *this;
}

size_t size() const
{
return strlen(_pdata);
}

const char* c_str() const
{
return _pdata;
}

void swap(String& rhs)
{
std::swap(_pdata, rhs._pdata);
}

~String()
{
delete[] _pdata;
}

private:
char* _pdata;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: