临时版本,操作符还需完善
头文件
#ifndef __MY_STRING_H__
#define __MY_STRING_H__
#include <iostream>
#include<iomanip>
using namespace std;
class myString
{
friend ostream& operator<< (ostream&,myString&);//重载<<运算符
friend istream& operator>> (istream&,myString&);//重载>>运算符
public:
myString(const char* str = NULL);
myString(const myString& strOther);
~myString();
myString operator+(const myString strOther);
bool operator==(const myString &str);
private:
char* m_strData;
};
inline myString::myString(const char* str)
{
if(!str)
{
m_strData = NULL;
return;
}
int len = strlen(str);
m_strData = new char[len + 1];
memcpy(m_strData, str, len);
m_strData[len] = '\0';
}
inline myString::myString(const myString& strOhter)
{
if(!strOhter.m_strData)
{
m_strData = NULL;
return;
}
int len = strlen(strOhter.m_strData);
m_strData = new char[len + 1];
memcpy(m_strData, strOhter.m_strData, len);
m_strData[len] = '\0';
}
inline myString::~myString()
{
if(m_strData)
delete m_strData;
}
inline myString myString::operator+(const myString strOther)
{
myString strRet;
if(!strOther.m_strData)
{
strRet = *this;
}
else
{
int len1 = strlen(this->m_strData);
int len2 = strlen(strOther.m_strData);
strRet.m_strData = new char[len1 + len2 + 1];
memcpy(strRet.m_strData, this->m_strData, len1);
memcpy(strRet.m_strData+len1, strOther.m_strData, len2);
strRet.m_strData[len1+len2] = '\0';
}
return strRet;
}
inline bool myString::operator==(const myString &str)
{
if(strlen(str.m_strData) != strlen(this->m_strData))
{
return false;
}
return strcmp(str.m_strData, this->m_strData) ? false : true;
}
ostream& operator<<(ostream& os,myString& str)
{
if(str.m_strData)
{
os << str.m_strData;
}
return os;
}
istream &operator>>( istream &input, myString &s )
{
char temp[ 255 ]; //用于存储输入流
input>>setw(255)>>temp;
s = temp; //使用赋值运算符
return input; //使用return可以支持连续使用>>运算符
}
#endif
main
// myString.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "myString.h"
int _tmain(int argc, _TCHAR* argv[])
{
myString str1("def");
myString str2("abc");
myString str3(str2);
myString str4( str1 + str2 );
cout << str1 <<endl;
cout << str2 <<endl;
cout << str3 <<endl;
cout << str4 <<endl;
cout << (str1 == str2) << endl;
cout << (str2== str3) << endl;
system("pause");
return 0;
}