// string.cpp : 定义控制台应用程序的入口点。
//c++语言基础,实现一个简单的string类
#include <iostream>
#include <string>
#include "stdlib.h"
#include <string.h>
using namespace std;
class String
{
public:
String(const char *str =NULL);//普通构造函数
String(const String &other );
~String();
String & operator =(const String &other);
String operator +(const String &other);//lianjie
bool operator ==(const String &other); //判断相等
int getLength(); //返回长度
private:
char *m_data;
};
String::String(const char *str)
{
if (str == NULL){
m_data = new char[1];
*m_data = '\0';
}
else{
int length = strlen(str);
m_data = new char[length + 1];
strcpy(m_data, str);
}
}
String::~String()
{
if (m_data)
{
delete[] m_data;
m_data = 0;
}
}
String::String(const String &other)
{
if (!other.m_data) //外边没数据等于0
{
m_data = 0;
}
m_data = new char[strlen(other.m_data)+1];
strcpy(m_data, other.m_data);
}
String & String::operator=(const String &other)
{
if (this != &other)
{
delete[] m_data;
if (!other.m_data)
{
m_data = 0;
}
else{
m_data = new char[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}
}
return *this;
}
int String::getLength()
{
return strlen(m_data);
}
String String::operator+(const String &other)
{ //新建一个String对象
String newString;
if (!other.m_data)
{
newString = *this;
}
else if (!m_data)
{
newString = other;
}
else{
newString.m_data = new char[strlen(m_data)+strlen(other.m_data)+1];
strcpy(newString.m_data ,m_data);
strcat(newString.m_data,other.m_data);
}
return newString;
}
int main( )
{ String str1 ="zhaomingming";
int n =str1.getLength();
cout << n <<endl;
//若要显示出来,应该封装一个show方法。
//printf("%s\n",str1.m_data);
String str2 ="jaiojaio";
cout <<str2.getLength()<<endl;
String str3(str1);
cout <<str3.getLength()<<endl;
String str4 = str1+str2;
cout <<str4.getLength()<<endl;
return 0;
}