String 类的实现

#include "stdafx.h"
#include <iostream>
using namespace std;

class MyString
{
public:
 MyString(const char *str = NULL);   //通用拷贝构造函数
 MyString(const MyString &another);  //拷贝构造函数
 ~MyString();  //析构函数
 MyString& operator = (const MyString&); //赋值函数

 friend ostream& operator << (ostream&, const MyString& s);
 friend istream& operator >> (istream& in, MyString& s);
 friend MyString operator + (const MyString&, const MyString&);
 bool operator == (const MyString&);
private:
 char* m_data;  //用于保存字符串
};

MyString::MyString(const char *str )
{
 if ( NULL==str )
  m_data = NULL;
 else
 {
  m_data = new char[strlen(str)+1];
  strcpy(m_data,str);
 }
}

MyString::MyString(const MyString &another)
{
 m_data = new char[strlen(another.m_data)+1];
 strcpy(m_data,another.m_data);
}

MyString::~MyString()
{
 if( m_data != NULL )
 {
  delete []m_data;
  m_data = NULL;
 }
}

MyString& MyString::operator=(const MyString& rhs)
{
 if( this == &rhs)
  return *this;
 delete []m_data;
 m_data = NULL;
 m_data = new char[strlen(rhs.m_data)+1];
strcpy(m_data, rhs.m_data);
return *this; } ostream& operator << (ostream& out, const MyString& s) { if (s.m_data) out<<s.m_data<<endl; return out; } istream& operator >> (istream& in, MyString& s) { char q[1000]; in>>q; s.m_data = new char[strlen(q)+1]; strcpy(s.m_data, q); return in; } MyString operator+(const MyString& lhs, const MyString& rhs) { MyString *ret = new MyString(lhs); strcat(ret->m_data, rhs.m_data); return *ret; } int _tmain(int argc, _TCHAR* argv[]) { MyString s; cin >> s; MyString s1; cin >> s1; MyString s2 = s+s1; cout << s2; return 0; } 有可能你在使用 strcpy 的时候 会碰到这个错误:(VS2012碰到的) error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> d:\microsoft\visiostudio\vs2012_ult_enu\setup\vc\include\string.h(110) : see declaration of 'strcpy' 没关系:这个问题的解决方式是这样的 右键项目-》“Properties”-》“C/C++”-》“Preprocessor” 在Preprocessor Definitions 中添加 _CRT_SECURE_NO_WARNINGS 即可解决这个问题

 

posted @ 2013-09-01 13:04  解放1949  阅读(409)  评论(0)    收藏  举报