设计跟实现string类,设计一个应用实例

设计和实现string类,设计一个应用实例
分成3个部分 主函数 头文件 定义
#include <iostream>
using namespace std;
class String
{
public :
  String ();
  String(const char*);
  String(const String&);
  virtual~String ();
  String operator=(const String&);
  String operator+(const String&);
  int length() const;
  void print() const;
  void setChar(int, char);
  friend ostream& operator<<(ostream& o,const String& s);
  void getData();

protected:  
  char *data;
};这是头文件

------解决方案--------------------
C/C++ code

class String
 {
 public :
     String ();
     String(const char*);
     String(const String&);
     virtual~String ();
     String operator=(const String&);
     String operator+(const String&);
     int length() const;
     void print() const;
     void setChar(int, char);
     friend ostream& operator<<(ostream& o,const String& s);
     char* getData();

 protected:   
     char *data;
 };

 String::String()
 {
    data = NULL;
 }

  String::String(const char* str)
  {
      data = new char[strlen(str)+1];
      strcpy(data,str);
  }

   String::String(const String& obj)
   {
       data = new char[strlen(obj.data)+1];
       strcpy(data,obj.data);
   }

   int  String::length() const
   {
       return strlen(data);
   }

   String::~String()
   {
       if(data)
           delete[] data;
   }
   void  String::print() const
   {
       cout<<data;
   }

   String  String::operator =(const String&obj)
   {
       if (data!=NULL && strlen(data)<strlen(obj.data))
       {
           delete[] data;
           data = NULL;
       }
       if(data==NULL)
           data = new char[strlen(obj.data)+1];
       strcpy(data,obj.data);
       return (*this);
   }

   String String::operator+(const String&obj)
   {
       char *p = new char[strlen(data)];
       strcpy(p,data);
        if (data!=NULL &&sizeof(data)<strlen(data)+obj.length())
        {
            delete[] data;
            data = NULL;
        }
        if(data == NULL)
            data = new char[strlen(p)+obj.length()+1];
        strcpy(data,p);
        strcat(data,obj.data);
        return *this;
   }

   char* String::getData()
   {
       return data;
   }

   void String::setChar(int nIndex, char element)
   {
        if(nIndex<0 || nIndex>length())
            return;
        data[nIndex] = element;
   }

   ostream& operator<<(ostream& o,const String& s)
   {
       if(s.data)
        o<<s.data<<endl;
       return o;
   }

   int main()
   {
       String obj1("ahjiojdshjklfhsjd"),obj2;
       cout<<obj1;
        obj2 = obj1;
        obj2.print();
   }

------解决方案--------------------
探讨

C/C++ code

class String
{
public :
String ();
String(const char*);
String(const String&amp;);
virtual~String ();
String operator=(const String&amp;);
String operator……