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

【C++】String类及其优化版的实现

2015-08-25 21:19 351 查看
#include<iostream>
using namespace std;
class String
{
public:
String()
{
_ptr = new char[1];
_ptr[0] = 0;
}
String(const char* str)
{
_ptr = new char[strlen(str)+1];
strcpy(_ptr,str);
}
String(const String& str)
{
_ptr = new char[strlen(str._ptr)+1];
strcpy(_ptr,str._ptr);
}
String& operator =(const String& str )
{
if(this != &str)
{
delete []_ptr;
_ptr = new char[strlen(str._ptr)+1];
strcpy(_ptr,str._ptr );
}
return *this;
}
~String()
{
delete []_ptr;
}
char* GetStr()
{
return _ptr;
}

private:
char* _ptr;
};

int main()
{
String s1;
cout<<"s1:"<<s1.GetStr()<<endl;
String s2("abcd");
cout<<"s2:"<<s2.GetStr()<<endl;
String s3("1234");
cout<<"s3:"<<s3.GetStr()<<endl;
String s4(s2);
cout<<"s4:"<<s4.GetStr()<<endl;
s2 = s3;
cout<<"s2:"<<s2.GetStr()<<endl;
getchar();
return 0;
}


String的优化版

#include <iostream>
using namespace std;

class String
{
public:
String(char* str)
:_ptr(new char[strlen(str) + 1])
{
strcpy(_ptr, str);
}

void Swap(String& s)
{
char* tmp = s._ptr;
s._ptr = _ptr;
_ptr = tmp;
}

String(const String& s)
:_ptr(NULL)
{
String tmp(s._ptr);
Swap(tmp);
}

//String& operator=(const String& s)
//{
//	if (this != &s)
//	{
//		String tmp(s._ptr);
//		this->Swap(tmp);
//	}

//	return *this;
//}

String& operator=(String s)
{
//
Swap(s);

return *this;
}

//String& operator=(const String& s)
//{
//	if (this != &s)
//	{
//		delete [] _ptr;
//		_ptr = new char[strlen(s._ptr) + 1];
//		strcpy(_ptr, s._ptr);
//	}

//	return *this;
//}

~String()
{
if (_ptr)
{
delete[] _ptr;
}
}

// 四个默认成员函数 + operator[]
char* GetStr()
{
return _ptr;
}

private:
char* _ptr;
};

int main()
{
String s1("abcd");
String s2(s1);
String s3("efghs");
s3 = s2;
s2 = s2;

cout<<"s1:"<<s1.GetStr()<<endl;
cout<<"s2:"<<s2.GetStr()<<endl;
cout<<"s3:"<<s3.GetStr()<<endl;

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