c++深いコピーstringクラスの簡単な実現
1946 ワード
#include<iostream>//
#pragma once
using namespace std;
class String
{
public:
String(char* str="\0");
~String();
String(const String& str );
void Cout();
char& operator[](size_t index);
String operator +(const String& str);
String operator =(const String& str);
String& operator +=(const String& str);
private:
char* _string;
};
//
#include<iostream>
#include"string.h"
using namespace std;
String::String(char* str)
:_string(new char[strlen(str) + 1])
{
strcpy(_string, str);
}
String::~String()
{
if (_string)
{
delete[] _string;
_string = NULL;
}
}
String::String(const String& str )
{
_string=new char[strlen(str._string) + 1];
strcpy(_string, str._string);
}
void String::Cout()
{
cout << _string << endl;
}
char& String:: operator[](size_t index)
{
if (index < strlen(_string))
return _string[index];
else
return _string[strlen(_string) - 1];
}
String String::operator +(const String& str)
{
String tmp;
tmp._string = new char[strlen(_string) + 1 + strlen(str._string)];
strcpy(tmp._string, _string);
strcat(tmp._string, str._string);
return tmp;
}
String String::operator =(const String& str)
{
if (&str != this)
{
_string = new char[strlen(str._string) + 1];
strcpy(_string, str._string);
return *this;
}
return *this;
}
String& String::operator +=(const String& str)
{
char* tmp = new char[strlen(_string) + 1 + strlen(str._string)];
strcpy(tmp, _string);
strcat(tmp, str._string);
delete[] _string;
_string = tmp;
return *this;
}
#include<iostream>//
#include"string.h"
using namespace std;
void test1()
{
String s1(" !");
String s2(s1);
String s3;
s1.Cout();
s2.Cout();
s1[19] = '?';
s3 = s3;
s3.Cout();
s1.Cout();
s3 = s1 + s2;
s3 += s1;
s3.Cout();
}
int main()
{
test1();
return 0;
}