A simple implementation case of the string class

  • 2020-05-10 18:34:40
  • OfStack

The class string USES assignment constructors, copy constructors, constructors, default constructors, destructors, overload operators, and so on


class String
{
	public:
		String()
		{
			data = new char[1];  // Why is it used here new char[1] Well, it is 1 This is to maintain symmetry with the destructor because it is used in other constructors char[]
			data[0]='\0';
			length = 0;
		}
		String(const char* str)
		{
			length = strlen(str);
			data = new char[length+1];
			strcpy(data,str);
			data[length]='\0';
		}
		String(const char* str,int n)
		{
			length = n;
			data = new char[n+1];
			strncpy(data,str,n);
			data[length] ='\0';
		}
		String(const String& src) // Copy constructor   The copy constructor 
		{
			length = src.length;
			data = new char[length+1];
			strcpy(data,src.data);
		}
		String& operator=(const String& src) // Assignment constructor 
		{
			if(this == &src)
				return *this;
			delete [] data;
			data = new char[src.length+1];
			strcpy(data,src.data);
			return *this;
		}
		String& operator=(const char* src) // On the other 1 Class assignment constructor 
		{
			delete [] data;
			length = strlen(src);
			data = new char[length+1];
			strcpy(data,src);
			return *this;
		}
		char& operator[](int n)
		{
			return data[n];
		}
		const char& operator[](int n) const  // for const A member function   It's better to return const To prevent the return value from being modified 
		{
			return data[n];
		}
	friend	ostream& operator<<(ostream& os,const String& st) ;  
		 
		~String()
		{
			delete [] data;	
		}
	private:
		char* data;
		int length;	
};
ostream& operator<<(ostream& os,const String& st)
{
   os<<st.data;
  return os;
}

Related articles: