废话少说,拒绝前奏,直接高潮,且看代码:
// 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