#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; }
原文地址:http://shaungqiran.blog.51cto.com/10532904/1717710