#ifndef _STRING_H_
#define _STRING_H_
#define NULL 0
class String
{
public:
String(const char* str = NULL);//构造函数
String(String& str);//拷贝构造函数
~String(); //析构函数
String& operator=(const String& str);
String operator+(const String& str);
bool operator==(const String& str);
char operator[](int index);
int getStringLength()const;
char* getString()const;
private:
char* m_pArgument;
};
#endif //_STRING_H_
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include "String.h"
String::String(const char* str /*= NULL*/)
{
if(!str){
m_pArgument = NULL;
}
else{
this->m_pArgument = new char[strlen(str) + 1];
strcpy(this->m_pArgument,str);
}
}
String::String(String& str)
{
if(!str.m_pArgument){
this->m_pArgument = NULL;
}
else{
this->m_pArgument = new char[strlen(str.m_pArgument) + 1];
strcpy(this->m_pArgument,str.m_pArgument);
}
}
String::~String()
{
if(this->m_pArgument)
{
delete[] this->m_pArgument;
this->m_pArgument = NULL;
}
}
String& String::operator=(const String& str)
{
if(this != &str){
delete[] this->m_pArgument;
if(!str.m_pArgument){
this->m_pArgument = NULL;
}else{
this->m_pArgument = new char[strlen(str.m_pArgument)+1];
strcpy(this->m_pArgument,str.m_pArgument);
}
}
return *this;
}
String String::operator+(const String& str)
{
String strNewCharacter;
if(!str.m_pArgument){
strNewCharacter = *this;
}else if(!str.m_pArgument){
strNewCharacter = str;
}else{
strNewCharacter.m_pArgument = new char[strlen(this->m_pArgument) + strlen(str.m_pArgument)+1];
strcpy(strNewCharacter.m_pArgument,this->m_pArgument);
strcat(strNewCharacter.m_pArgument,str.m_pArgument);
}
return strNewCharacter;
}
char String::operator[](int index)
{
if(index > 0 && index < strlen(this->m_pArgument))
return this->m_pArgument[index];
}
int String::getStringLength() const
{
int length = strlen(this->m_pArgument);
return length;
}
bool String::operator==(const String& str)
{
if(strlen(this->m_pArgument) != strlen(str.m_pArgument))
return false;
return strcmp(this->m_pArgument,str.m_pArgument) ? false : true;
}
char* String::getString()const
{
return this->m_pArgument;
}
#include <iostream>
#include "String.h"
int main(void)
{
std::cout << "构造" <<std::endl;
String str1("I Love You");
String str2("I Love You Too");
std::cout << "拷贝构造" << std::endl;
String str11(str1);
std::cout << str11.getString() << std::endl;
std::cout << str1.getStringLength() << std::endl;
std::cout << str1.getString() << std::endl;
std::cout << str2.getString() << std::endl;
std::cout << "操作符" << std::endl;
if(str1 == str2){
std::cout << "str1 == str2" << std::endl;
}else{
std::cout << "str1 != str2" << std::endl;
}
std::cout << "赋值操作符" << std::endl;
String str3(str1 + str2);
std::cout << str3.getString() << std::endl;
String str4;
str4 = str3;
std::cout << str4.getString() << std::endl;
std::cout << "索引操作符" << std::endl;
String str5[2] = {str1,str2};
for(int num=0; num < 2; num++)
{
std::cout << str5[num].getString() << std::endl;
}
return 0;
}
运行结果: