String 类的构造,复制构造,运算符重载和析构函数
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string.h>
using namespace std;
class String
{
public:
String()
:_pStr(new char[1])
{
*_pStr = '\0';
}
String(char* pStr)
{
_pStr = new char[strlen(pStr) + 1];
strcpy(_pStr, pStr);
}
String(const String& s)
{
_pStr = new char[strlen(s._pStr) + 1];
strcpy(_pStr, s._pStr);
}
/*
String (const String s)
{
String Tmp(s);
swap(_pStr, Tmp);// _pStr = NULL;
*/
String operator=(const String& s)
{
if (this != &s)
{
char* tmp = new char[strlen(s._pStr) + 1];
strcpy(tmp, s._pStr);
delete[] _pStr;
_pStr = tmp;
}
return *this;
}
~String()
{
if (_pStr != NULL)
{
delete[] _pStr;
_pStr = NULL;
}
}
friend void PrintString(String s);
private:
char* _pStr;
};
void PrintString(String s)
{
while(*(s._pStr) != '\0')
{
cout << *(s._pStr) << endl;
s._pStr++;
}
}
void FunTest()
{
String s1;
String s2("zk");
String s3(s2);
String s4;
s4 = s3;
PrintString(s2);
}
int main()
{
FunTest();
system("pause");
return 0;
}