废话少说,拒绝前奏,直接高潮,且看代码:
// String.h
#include <iostream>
#include <cstring>
#pragma warning(disable : 4996)
using namespace std;
class String
{
public:
	// **************************************************************************  
	// 类的四大函数:构造函数、拷贝构造函数、重载赋值运算符、析构函数  
	// **************************************************************************
	String(const char* str = NULL);
	String(const String &str);
	String& operator=(const String &str);
	~String();
	// **************************************************************************  
	// 重载  
	// **************************************************************************
	String operator+(const String &str) const;
	String& operator+=(const String &str);
	bool operator==(const String &str);
	char& operator[](unsigned int index);
	friend ostream& operator<<(ostream& os, String& str);
	friend istream& operator>>(istream& is, String& str);
	unsigned short size();
	const char* c_str() const;
private:
private:
	char* m_string;
};
// **************************************************************************  
// 类的四大函数:构造函数、拷贝构造函数、重载赋值运算符、析构函数  
// **************************************************************************  
String::String(const char* str)
{
	if (!str){
		m_string = NULL;
	}
	else{
		m_string = new char[strlen(str) + 1];
		strcpy(m_string, str);
	}
}
String::String(const String &str)
{
	if (!str.m_string){
		m_string = NULL;
	}
	else{
		m_string = new char[strlen(str.m_string) + 1];
		strcpy(m_string, str.m_string);
	}
}
String& String::operator=(const String &str)
{
	if (this != &str){
		delete[] m_string;
		if (!str.m_string){
			m_string = NULL;
		}
		else{
			m_string = new char[strlen(str.m_string) + 1];
			strcpy(m_string, str.m_string);
		}
	}
	return *this;
}
String::~String()
{
	delete[] m_string;
	m_string = NULL;
}
// **************************************************************************  
// 重载  
// **************************************************************************
String String::operator+(const String &str) const
{
	String newString;
	if (!str.m_string){
		newString = *this;
	}
	else if(!m_string){
		newString = str;
	}
	else{
		newString.m_string = new char[strlen(m_string) + strlen(str.m_string) + 1];
		strcpy(newString.m_string, m_string);
		strcat(newString.m_string, str.m_string);
	}
	return newString;
}
String& String::operator+=(const String &str)
{
	String newString;
	if (!str.m_string){
		newString = *this;
	}
	else if (!m_string){
		newString = str;
	}
	else{
		newString.m_string = new char[strlen(m_string) + strlen(m_string) + 1];
		strcpy(newString.m_string, m_string);
		strcat(newString.m_string, str.m_string);
	}
	strcpy(m_string, newString.m_string);
	return *this;
}
bool String::operator==(const String &str)
{
	if (strlen(m_string) != strlen(str.m_string)){
		return false;
	}
	return strcmp(m_string, str.m_string) ? false : true;
}
char& String::operator[](unsigned int index)
{
	if (index >=0 && index <=strlen(m_string)){
		return m_string[index];
	}
	else{
		cout << "invalid index:" << index << endl;
		exit(0);
	}
}
ostream& operator<<(ostream& os, String& str)
{
	os << str.m_string;
	return os;
}
istream& operator>>(istream& is, String& str)
{
	char tmp[1024];
	is >> tmp;
	str.m_string = new char[strlen(tmp) + 1];
	strcpy(str.m_string, tmp);
	return is;
}
unsigned short String::size()
{
	return strlen(m_string);
}
const char* String::c_str() const
{
	return m_string;
}#include "String.h"
#include <cstdlib>
int main()
{
	String s;
	cin >> s;
	cout << s << ":" << s.size() << endl;
	char a[] = "Hello", b[] = "World";
	String s1(a), s2(b);
	cout << s1 << " + " << s2 << " = " << s1 + s2 << endl;
	String s3 = s1 + s2;
	if (s1 == s3){
		cout << "First: s1 == s3" << endl;
	}
	s1 += s2;
	if (s1 == s3){
		cout << "Second: s1 == s3" << endl;
	}
	system("pause");
	return 0;
}
附:
strcpy在vs2013下报错,解决方案参考:
http://blog.csdn.net/u010273652/article/details/21320431
原文地址:http://blog.csdn.net/xufeng0991/article/details/41468341