0
点赞
收藏
分享

微信扫一扫

C++重写部分String类


mystring.h

#ifndef
#define

#include <cstring>
#include <iostream>
using namespace std;


class MyString{
public:
MyString(const char* cstr=0);
MyString(const MyString& str);
MyString& operator=(const MyString& str); //类成员操作符重载只需要提供一个参数,即代表操作两个MyString对象,原对象有隐藏的this指针
~MyString();
char* get_c_str() const {return m_data;}
private:
char* m_data;
};


inline
MyString::MyString(const char* cstr){
if(cstr){
m_data=new char[std::strlen(cstr)+1]; //加1是为了存储字符串最后的\0
strcpy(m_data,cstr);
}
else{
m_data=new char[1];
*m_data='\0';
}
}


inline
MyString::~MyString()
{
delete[] m_data;
}

inline
MyString& MyString::operator=(const MyString& str)
{
if(this==&str) //为什么要有这个判断是点睛之笔,从内存的角度去了解
{
return *this;
}

delete[] m_data;
m_data=new char[std::strlen(str.m_data)+1];
strcpy(m_data,str.m_data);
return *this;
}

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



ostream& operator<<(ostream& os,const MyString& str)
{
os<<str.get_c_str();
return os;
}

#endif

mystring_test.cpp

#include "mystring.h"
#include <iostream>

using namespace std;

int main()
{
MyString s1("hello");
MyString s2("world");

MyString s3(s2);
cout<<s3<<endl;

s3=s1;
cout<<s3<<endl;
cout<<s2<<endl;
cout<<s1<<endl;
}

参考:

  1. 侯捷C++高级开发


举报

相关推荐

c++ || string类

c++ string类

c++   string类

c++ 实现String类

String类实现 C++

0 条评论