???????????Ь????????????C++?У???????????has-a????е??????????????string?????????????С???????????????????????????????????????????????????????????????string?????????д???????string??(???????????????д????string???????????????????ü????д???)???????д??????????string?????????????????????СС??????string?????????С??????????????String???????????????????????????????????????????????????????д??string???д?????????????????????????????????????????????????????????????????λ????????С???????
????String??????
????#ifndef STRING_H_
????#define STRING_H_
????#include <iostream>
????//StringClass
????class String{
????private:
????char* StringTemp;
????protected:
????public:
????String(char* Str = NULL);
????String(const String & KStr_t);
????virtual ~String();
????int lenght()const;
????char operator[](unsigned int Count);
????friend std::ostream & operator<<(std::ostream & output??const String & KStr_t);
????friend std::istream & operator>>(std::istream & input??String & KStr_t);
????String & operator=(const String & KStr_t);
????String & operator=(const char* KStr_t);
????String operator+(const String & KStr_t)const;
????bool operator==(const String & KStr_t)const;
????};
????#endif
????String????
????#include "String.h"
????#include <iostream>
????String::String(char* Str){
????if(Str == NULL){
????StringTemp = new char[1];
????strcpy(StringTemp??"");
????}
????else{
????StringTemp = new char[strlen(Str)+1];
????strcpy(StringTemp??Str);
????}
????}
????String::~String(){
????delete []StringTemp;  //??????
????}
????//String??????????????
????int String::lenght()const{
????return strlen(StringTemp);
????}
????char String::operator[](unsigned int Count){
????if(Count>=0&&Count<strlen(StringTemp)){
????return StringTemp[Count];
????}
????}
????//????<<????????????????????????
????std::ostream & operator<<(std::ostream & output??const String & KStr_t){
????output << KStr_t.StringTemp;
????return output;
????}
????//????>>??????????????????????????????
????std::istream & operator>>(std::istream & input??String & KStr_t){
????delete []KStr_t.StringTemp;
????char StrTemp[255];  <span style="white-space:pre"> </span>//????255???????????????
????input.getline(StrTemp??254);
????KStr_t.StringTemp = new char[strlen(StrTemp)+1];
????strcpy(KStr_t.StringTemp??StrTemp);
????return input;
????}
????//?????????????
????String & String::operator=(const String & KStr_t){
????if(this == &KStr_t){return *this;} //?ж???????????????????
????delete StringTemp;   //?????????????????????
????????????????????????????????????????й?
????StringTemp = new char[strlen(KStr_t.StringTemp)+1];
????strcpy(StringTemp??KStr_t.StringTemp);
????return *this;   //?????????????????????
???????
????}
????//?????String??????????
????String & String::operator=(const char* KStr_t){
????delete StringTemp;  //????????String????
????StringTemp?????????????飬??????й?
????StringTemp = new char[strlen(KStr_t)+1];
????strcpy(StringTemp??KStr_t);
????return *this;
????}
????//???String????????????????
????String String::operator+(const String & KStr_t)const{
????String Temp;
????Temp.StringTemp = new char[strlen(StringTemp)+strlen(KStr_t.StringTemp)+1]; //?????????????String????
?????????????????????????????????
????strcpy(Temp.StringTemp??StringTemp);
????strcat(Temp.StringTemp??KStr_t.StringTemp);  //???????????????????????????
??????
????return Temp;  //????????????????(?????????)???String????????????????????????????????(???????)???????????????????????????
????}
????//???????????????????
????String::String(const String & KStr_t){
????StringTemp = new char[strlen(KStr_t.StringTemp)+1];
????strcpy(StringTemp??KStr_t.StringTemp);
????}
????//?ж?????String???????洢??????????????????true??????false
????bool String::operator==(const String & KStr_t)const{
????if(strcmp(StringTemp??KStr_t.StringTemp)==0){
????return true;
????}
????else{
????return false;
????}
????}